From 613206bbdaec0aa2b8f69767e15b881bdc5f6e93 Mon Sep 17 00:00:00 2001 From: Pranay Date: Fri, 4 Jul 2025 11:04:31 +0530 Subject: [PATCH] Ninja Dashboards --- .../ks_dashboard_ninja/__init__.py | 15 + .../ks_dashboard_ninja/__manifest__.py | 188 + .../ks_dashboard_ninja/common_lib/__init__.py | 1 + .../common_lib/ks_date_filter_selections.py | 343 ++ .../controllers/__init__.py | 4 + .../controllers/ks_chart_export.py | 128 + .../controllers/ks_dashboard_export.py | 84 + .../controllers/ks_domain_fix.py | 21 + .../controllers/ks_list_export.py | 213 + .../ks_dashboard_ninja/data/dn_data.xml | 9 + .../data/ks_default_data.xml | 605 +++ .../ks_dashboard_ninja/data/ks_mail_cron.xml | 11 + .../ks_dashboard_ninja/data/sequence.xml | 11 + .../demo/ks_dashboard_ninja_demo.xml | 44 + .../ks_dashboard_ninja/i18n/en_US.po | 3070 +++++++++++ .../ks_dashboard_ninja/i18n/es_MX.po | 3518 +++++++++++++ .../ks_dashboard_ninja/i18n/it.po | 3509 +++++++++++++ .../ks_dashboard_ninja/models/Kpi_mail.py | 9 + .../ks_dashboard_ninja/models/__init__.py | 16 + .../models/ks_ai_ninja_dashboard.py | 397 ++ .../models/ks_ai_whole_dashboard.py | 90 + .../models/ks_chat_channel.py | 29 + .../models/ks_child_dashboard.py | 25 + .../models/ks_country_bounds.py | 182 + .../models/ks_dashboard_filters.py | 89 + .../models/ks_dashboard_ninja.py | 1515 ++++++ .../models/ks_dashboard_ninja_items.py | 4598 +++++++++++++++++ .../models/ks_dashboard_templates.py | 41 + .../models/ks_dn_to_do_item.py | 141 + .../models/ks_import_dashboard.py | 30 + .../models/ks_item_action.py | 29 + .../ks_dashboard_ninja/models/ks_key_fetch.py | 31 + .../ks_dashboard_ninja/models/res_settings.py | 52 + .../ks_dashboard_ninja/requirements.txt | 5 + .../security/ir.model.access.csv | 36 + .../security/ks_security_groups.xml | 59 + .../static/description/icon.png | Bin 0 -> 105472 bytes .../static/images/3dcube.svg | 5 + .../ks_dashboard_ninja/static/images/Area.svg | 4 + .../ks_dashboard_ninja/static/images/Bar.svg | 6 + .../static/images/Bullet.svg | 6 + .../static/images/Chatbot.svg | 5 + .../ks_dashboard_ninja/static/images/Comp.gif | Bin 0 -> 2709598 bytes .../static/images/Doughnut.svg | 3 + .../static/images/Flower.svg | 6 + .../static/images/Funnel.svg | 3 + .../static/images/Horizontal Bar.svg | 6 + .../ks_dashboard_ninja/static/images/KPI.svg | 6 + .../ks_dashboard_ninja/static/images/Line.svg | 4 + .../ks_dashboard_ninja/static/images/List.svg | 8 + .../ks_dashboard_ninja/static/images/Map.svg | 4 + .../ks_dashboard_ninja/static/images/Pie.svg | 4 + .../static/images/Polar.svg | 3 + .../static/images/Radar.svg | 3 + .../static/images/Radial.svg | 5 + .../static/images/Scatter.svg | 10 + .../ks_dashboard_ninja/static/images/Tile.svg | 3 + .../static/images/To-do.svg | 3 + .../static/images/ai-icon.png | Bin 0 -> 1354 bytes .../static/images/area-chart.svg | 4 + .../static/images/bar-chart.svg | 6 + .../images/dashboardOverview/Active Users.svg | 6 + .../images/dashboardOverview/All Charts.svg | 5 + .../dashboardOverview/All Dashboards.svg | 6 + .../images/dashboardOverview/All Lists.svg | 7 + .../images/dashboardOverview/ArrowRise.svg | 3 + .../Bookmarked Dashboards.svg | 4 + .../images/dashboardOverview/Graph 1.svg | 9 + .../images/dashboardOverview/Sales-Icon.svg | 3 + .../images/dashboardOverview/Total Maps.svg | 5 + .../static/images/dashboardOverview/Union.svg | 3 + .../images/dashboardOverview/access-error.png | Bin 0 -> 5516 bytes .../images/dashboardOverview/add-btn.svg | 5 + .../images/dashboardOverview/add-square.svg | 5 + .../static/images/dashboardOverview/add.svg | 4 + .../images/dashboardOverview/arrow-right.svg | 3 + .../images/dashboardOverview/bookmarks.svg | 5 + .../static/images/dashboardOverview/box.png | Bin 0 -> 443 bytes .../static/images/dashboardOverview/box.svg | 7 + .../static/images/dashboardOverview/brush.svg | 5 + .../images/dashboardOverview/candle-2.svg | 8 + .../dashboardOverview/category-logo.svg | 6 + .../images/dashboardOverview/chat-ai.svg | 4 + .../dashboardOverview/close-circle-two.svg | 5 + .../images/dashboardOverview/close-circle.svg | 5 + .../images/dashboardOverview/convertshape.png | Bin 0 -> 463 bytes .../images/dashboardOverview/convertshape.svg | 6 + .../static/images/dashboardOverview/copy.svg | 4 + .../dashboardOverview/dashboard-img.png | Bin 0 -> 597 bytes .../dashboardOverview/defaultDashboard.png | Bin 0 -> 346055 bytes .../dashboardOverview/deleteConfirmation.svg | 13 + .../dashboardOverview/demo-dashboard-1.png | Bin 0 -> 38578 bytes .../dashboardOverview/document-download.svg | 7 + .../dashboardOverview/document-upload.svg | 7 + .../images/dashboardOverview/down-arrow.svg | 3 + .../images/dashboardOverview/element-4.svg | 6 + .../images/dashboardOverview/explainAi.png | Bin 0 -> 4697 bytes .../static/images/dashboardOverview/graph.svg | 4 + .../images/dashboardOverview/illustrator.svg | 8 + .../images/dashboardOverview/info-circle.svg | 5 + .../static/images/dashboardOverview/key.svg | 3 + .../static/images/dashboardOverview/layer.svg | 5 + .../images/dashboardOverview/magic-star.svg | 4 + .../images/dashboardOverview/menu-new.svg | 5 + .../static/images/dashboardOverview/menu.svg | 5 + .../dashboardOverview/message-notif.png | Bin 0 -> 436 bytes .../dashboardOverview/message-notif.svg | 7 + .../images/dashboardOverview/messages.svg | 7 + .../static/images/dashboardOverview/more.svg | 5 + .../images/dashboardOverview/no-data.png | Bin 0 -> 4713 bytes .../images/dashboardOverview/note-2.svg | 6 + .../images/dashboardOverview/note-text.svg | 7 + .../dashboardOverview/profile-2user.svg | 6 + .../images/dashboardOverview/ranking.png | Bin 0 -> 421 bytes .../dashboardOverview/sample-chart-1.png | Bin 0 -> 10182 bytes .../images/dashboardOverview/save-2.svg | 5 + .../images/dashboardOverview/setting-2.svg | 4 + .../images/dashboardOverview/sms-tracking.svg | 6 + .../images/dashboardOverview/tag-cross.svg | 5 + .../static/images/dashboardOverview/trash.svg | 8 + .../images/dashboardOverview/user-adde.svg | 3 + .../images/dashboardOverview/video-circle.svg | 4 + .../static/images/demo-chart.png | Bin 0 -> 15558 bytes .../static/images/demo-img.png | Bin 0 -> 8509 bytes .../static/images/demo-tooltip-img.png | Bin 0 -> 1707 bytes .../static/images/donut-chart.svg | 3 + .../static/images/duplicate-img.png | Bin 0 -> 3626 bytes .../static/images/favorite-chart.svg | 5 + .../static/images/hand_wave.png | Bin 0 -> 3469 bytes .../static/images/horizontalbar-chart.svg | 6 + .../static/images/icons/Info-circle.svg | 5 + .../static/images/icons/Search-light.svg | 3 + .../static/images/icons/Search.svg | 3 + .../static/images/icons/Vector.svg | 3 + .../static/images/icons/back-icon.svg | 3 + .../static/images/icons/calendar.svg | 12 + .../static/images/icons/close-circle.svg | 5 + .../static/images/icons/down-arrow.svg | 3 + .../images/icons/dropdown-icon-light.svg | 5 + .../static/images/icons/dropdown-icon.svg | 5 + .../static/images/icons/edit-btn.svg | 10 + .../static/images/icons/generate-ai.svg | 9 + .../static/images/icons/import-btn.svg | 4 + .../static/images/icons/mail-btn.svg | 4 + .../static/images/icons/play-btn.svg | 3 + .../static/images/icons/print-btn.svg | 10 + .../static/images/icons/quality-invoice.svg | 3 + .../static/images/line-chart.svg | 4 + .../static/images/loader.gif | Bin 0 -> 6612190 bytes .../static/images/modal-explain-ai.png | Bin 0 -> 4697 bytes .../static/images/pie-chart.svg | 4 + .../static/images/polar-chart.svg | 3 + .../static/images/selected.svg | 4 + .../static/images/voice-cricle.svg | 3 + .../static/lib/css/awesomplete.css | 106 + .../static/lib/css/gridstack.min.css | 1 + .../static/lib/js/Animated.js | 1 + .../static/lib/js/Dataviz.js | 2 + .../static/lib/js/Material.js | 2 + .../static/lib/js/Moonrise.js | 2 + .../static/lib/js/awesomplete.js | 577 +++ .../static/lib/js/canvg.min.js | 1 + .../static/lib/js/exporting.js | 2 + .../static/lib/js/gridstack-h5.js | 2 + .../ks_dashboard_ninja/static/lib/js/index.js | 1 + .../static/lib/js/jspdf.umd.min.js.map | 1 + .../ks_dashboard_ninja/static/lib/js/map.js | 1 + .../static/lib/js/pdf.min.js | 538 ++ .../static/lib/js/pdfmake.min.js | 38 + .../static/lib/js/percent.js | 2 + .../static/lib/js/print.min.js | 20 + .../ks_dashboard_ninja/static/lib/js/radar.js | 1 + .../static/lib/js/vfs_fonts.js | 6 + .../static/lib/js/worldLow.js | 1 + .../ks_dashboard_ninja/static/lib/js/xy.js | 1 + .../src/components/chatwithAI/ks_chat.js | 71 + .../src/components/chatwithAI/ks_chat.xml | 100 + .../ks_dashboard_graphs.js | 2627 ++++++++++ .../ks_dashboard_graphs.xml | 343 ++ .../ks_dashboard_kpi_view/ks_dashboard_kpi.js | 482 ++ .../ks_dashboard_kpi.xml | 972 ++++ .../ks_dashboard_list.js | 232 + .../ks_dashboard_list.xml | 450 ++ .../ks_new_list_view.xml | 73 + .../ks_dashboard_tile.js | 235 + .../ks_dashboard_tile.xml | 1750 +++++++ .../ks_dashboard_to_do_item/editdialog.js | 35 + .../ks_dashboard_to_do_item/editdialog.xml | 28 + .../ks_dashboard_to_do.js | 342 ++ .../ks_dashboard_to_do.xml | 490 ++ .../static/src/css/ks_ai_dash.css | 52 + .../static/src/css/ks_dashboard_gridstack.css | 36 + .../src/css/ks_dashboard_item_theme.css | 75 + .../static/src/css/ks_dashboard_ninja.scss | 747 +++ .../src/css/ks_dashboard_ninja_item.css | 190 + .../static/src/css/ks_dashboard_ninja_pro.css | 329 ++ .../static/src/css/ks_dashboard_options.css | 83 + .../static/src/css/ks_dn_filter.css | 90 + .../static/src/css/ks_flower_view.css | 21 + .../static/src/css/ks_funnel_view.css | 22 + .../src/css/ks_icon_container_modal.css | 93 + .../static/src/css/ks_input_bar.css | 125 + .../static/src/css/ks_map_view.css | 21 + .../static/src/css/ks_radial_chart.css | 22 + .../static/src/css/ks_to_do_item.css | 160 + .../static/src/css/ks_toggle_icon.css | 150 + .../static/src/css/style.css | 1011 ++++ .../static/src/js/chatWizard.js | 58 + .../static/src/js/chatWizardIntegration.js | 113 + .../static/src/js/custom_filter.js | 278 + .../static/src/js/dashboards_overview.js | 165 + .../static/src/js/dnNavBarExtend.js | 176 + .../static/src/js/domainfix.js | 96 + .../static/src/js/file_uploader_extend.js | 38 + .../src/js/formView&NotificationExtend.js | 68 + .../static/src/js/ks_ai_dash_action.js | 538 ++ .../static/src/js/ks_custom_dialog.js | 138 + .../static/src/js/ks_dashboard_graph_ai.js | 57 + .../static/src/js/ks_dashboard_kpi_ai.js | 56 + .../static/src/js/ks_dashboard_ninja_new.js | 2043 ++++++++ .../static/src/js/ks_dashboard_tile_ai.js | 53 + .../static/src/js/ks_dashboard_todo_ai.js | 48 + .../static/src/js/ks_dropdown.js | 38 + .../static/src/js/ks_filter_props_new.js | 1313 +++++ .../static/src/js/ks_global_functions.js | 203 + .../static/src/js/loader_screen.js | 81 + .../static/src/js/modalsExtend.js | 44 + .../static/src/scss/Generate-ai.scss | 69 + .../static/src/scss/chartInsight.scss | 404 ++ .../static/src/scss/chartScreen.scss | 728 +++ .../static/src/scss/common.scss | 2779 ++++++++++ .../static/src/scss/create_dashboard.scss | 571 ++ .../static/src/scss/explainAi.scss | 184 + .../static/src/scss/form_view.scss | 111 + .../static/src/scss/generateAI.scss | 131 + .../static/src/scss/header.scss | 386 ++ .../static/src/scss/ks_dn_gridstack.scss | 19 + .../static/src/scss/main.scss | 6 + .../static/src/scss/modal.scss | 99 + .../static/src/scss/overview.scss | 476 ++ .../static/src/scss/recentSearches.scss | 69 + .../static/src/scss/screen.scss | 121 + .../static/src/scss/variable.scss | 149 + .../widgets/color_picker/ks_color_picker.js | 80 + .../widgets/color_picker/ks_color_picker.xml | 11 + .../widgets/ks_ai_keyword/ks_ai_keyword.js | 75 + .../widgets/ks_ai_keyword/ks_ai_keyword.xml | 64 + .../ks_bullet_chart/ks_bullet_chart.js | 244 + .../ks_bullet_chart/ks_bullet_chart.xml | 19 + .../ks_funnel_chart/ks_funnel_chart.js | 164 + .../ks_funnel_chart/ks_funnel_chart.xml | 19 + .../widgets/ks_graph_view/ks_graph_view.js | 949 ++++ .../widgets/ks_graph_view/ks_graph_view.xml | 19 + .../ks_image_widget/ks_icon_dialog.xml | 37 + .../ks_icon_selector_dialog.js | 72 + .../ks_image_widget/ks_image_widget.js | 40 + .../ks_image_widget/ks_image_widget.xml | 45 + .../ks_item_type_selection.js | 51 + .../ks_item_type_selection.xml | 201 + .../static/src/widgets/ks_kpi/ks_kpi.js | 439 ++ .../static/src/widgets/ks_kpi/ks_kpi.xml | 241 + .../src/widgets/ks_list_view/ks_list_view.js | 130 + .../src/widgets/ks_list_view/ks_list_view.xml | 118 + .../src/widgets/ks_map_view/ks_map_view.js | 358 ++ .../src/widgets/ks_map_view/ks_map_view.xml | 19 + .../ks_theme_component.js | 44 + .../ks_theme_component.xml | 14 + .../static/src/widgets/ks_tile/ks_tile.js | 120 + .../static/src/widgets/ks_tile/ks_tile.xml | 255 + .../static/src/widgets/ks_to_do/ks_to_do.js | 89 + .../static/src/widgets/ks_to_do/ks_to_do.xml | 177 + .../static/src/xml/chat_wizard.xml | 24 + .../static/src/xml/custom_dialog_ai.xml | 330 ++ .../static/src/xml/custom_filter.xml | 176 + .../static/src/xml/filter_extend.xml | 20 + .../src/xml/form¬ificationExtend.xml | 71 + .../static/src/xml/ks_ai_dash_ninja.xml | 134 + .../xml/ks_dashboard_ninja_item_templates.xml | 19 + .../src/xml/ks_dashboard_ninja_templates.xml | 995 ++++ .../static/src/xml/ks_dn_global_filter.xml | 399 ++ .../static/src/xml/ks_domain_props.xml | 9 + .../static/src/xml/modalsExtend.xml | 38 + .../static/src/xml/navBarExtend.xml | 371 ++ .../static/src/xml/svg_templates.xml | 36 + .../views/ks_ai_dashboard.xml | 74 + .../views/ks_dashboard_action.xml | 34 + .../views/ks_dashboard_csv_group_by.xml | 46 + .../views/ks_dashboard_group_by.xml | 46 + .../views/ks_dashboard_ninja_item_view.xml | 1291 +++++ .../views/ks_dashboard_ninja_view.xml | 406 ++ .../views/ks_import_dashboard_view.xml | 41 + .../ks_dashboard_ninja/views/ks_key_fetch.xml | 37 + .../views/ks_whole_ai_dashboard.xml | 54 + .../ks_dashboard_ninja/views/res_settings.xml | 57 + .../ks_dashboard_ninja/views/webExtend.xml | 9 + .../ks_dashboard_ninja/wizard/__init__.py | 2 + .../wizard/ks_create_dashboard_wiz.py | 51 + .../wizard/ks_create_dashboard_wiz_view.xml | 91 + .../wizard/ks_duplicate_dashboard_wiz.py | 53 + .../ks_duplicate_dashboard_wiz_view.xml | 59 + 300 files changed, 53384 insertions(+) create mode 100644 third_party_addons/ks_dashboard_ninja/__init__.py create mode 100644 third_party_addons/ks_dashboard_ninja/__manifest__.py create mode 100644 third_party_addons/ks_dashboard_ninja/common_lib/__init__.py create mode 100644 third_party_addons/ks_dashboard_ninja/common_lib/ks_date_filter_selections.py create mode 100644 third_party_addons/ks_dashboard_ninja/controllers/__init__.py create mode 100644 third_party_addons/ks_dashboard_ninja/controllers/ks_chart_export.py create mode 100644 third_party_addons/ks_dashboard_ninja/controllers/ks_dashboard_export.py create mode 100644 third_party_addons/ks_dashboard_ninja/controllers/ks_domain_fix.py create mode 100644 third_party_addons/ks_dashboard_ninja/controllers/ks_list_export.py create mode 100644 third_party_addons/ks_dashboard_ninja/data/dn_data.xml create mode 100644 third_party_addons/ks_dashboard_ninja/data/ks_default_data.xml create mode 100644 third_party_addons/ks_dashboard_ninja/data/ks_mail_cron.xml create mode 100644 third_party_addons/ks_dashboard_ninja/data/sequence.xml create mode 100644 third_party_addons/ks_dashboard_ninja/demo/ks_dashboard_ninja_demo.xml create mode 100644 third_party_addons/ks_dashboard_ninja/i18n/en_US.po create mode 100644 third_party_addons/ks_dashboard_ninja/i18n/es_MX.po create mode 100644 third_party_addons/ks_dashboard_ninja/i18n/it.po create mode 100644 third_party_addons/ks_dashboard_ninja/models/Kpi_mail.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/__init__.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_ai_ninja_dashboard.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_ai_whole_dashboard.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_chat_channel.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_child_dashboard.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_country_bounds.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_dashboard_filters.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_dashboard_templates.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_dn_to_do_item.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_import_dashboard.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_item_action.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/ks_key_fetch.py create mode 100644 third_party_addons/ks_dashboard_ninja/models/res_settings.py create mode 100644 third_party_addons/ks_dashboard_ninja/requirements.txt create mode 100644 third_party_addons/ks_dashboard_ninja/security/ir.model.access.csv create mode 100644 third_party_addons/ks_dashboard_ninja/security/ks_security_groups.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/description/icon.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/3dcube.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Area.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Bar.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Bullet.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Chatbot.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Comp.gif create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Doughnut.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Flower.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Funnel.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Horizontal Bar.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/KPI.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Line.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/List.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Map.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Pie.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Polar.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Radar.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Radial.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Scatter.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/Tile.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/To-do.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/ai-icon.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/area-chart.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/bar-chart.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/Active Users.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/All Charts.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/All Dashboards.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/All Lists.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/ArrowRise.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/Bookmarked Dashboards.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/Graph 1.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/Sales-Icon.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/Total Maps.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/Union.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/access-error.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/add-btn.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/add-square.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/add.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/arrow-right.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/bookmarks.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/box.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/box.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/brush.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/candle-2.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/category-logo.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/chat-ai.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/close-circle-two.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/close-circle.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/convertshape.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/convertshape.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/copy.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/dashboard-img.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/defaultDashboard.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/deleteConfirmation.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/demo-dashboard-1.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/document-download.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/document-upload.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/down-arrow.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/element-4.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/explainAi.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/graph.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/illustrator.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/info-circle.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/key.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/layer.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/magic-star.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/menu-new.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/menu.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/message-notif.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/message-notif.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/messages.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/more.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/no-data.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/note-2.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/note-text.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/profile-2user.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/ranking.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/sample-chart-1.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/save-2.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/setting-2.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/sms-tracking.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/tag-cross.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/trash.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/user-adde.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/dashboardOverview/video-circle.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/demo-chart.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/demo-img.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/demo-tooltip-img.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/donut-chart.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/duplicate-img.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/favorite-chart.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/hand_wave.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/horizontalbar-chart.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/Info-circle.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/Search-light.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/Search.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/Vector.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/back-icon.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/calendar.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/close-circle.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/down-arrow.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/dropdown-icon-light.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/dropdown-icon.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/edit-btn.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/generate-ai.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/import-btn.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/mail-btn.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/play-btn.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/print-btn.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/icons/quality-invoice.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/line-chart.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/loader.gif create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/modal-explain-ai.png create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/pie-chart.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/polar-chart.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/selected.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/images/voice-cricle.svg create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/css/awesomplete.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/css/gridstack.min.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/Animated.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/Dataviz.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/Material.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/Moonrise.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/awesomplete.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/canvg.min.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/exporting.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/gridstack-h5.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/index.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/jspdf.umd.min.js.map create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/map.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/pdf.min.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/pdfmake.min.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/percent.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/print.min.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/radar.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/vfs_fonts.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/worldLow.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/lib/js/xy.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/chatwithAI/ks_chat.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/chatwithAI/ks_chat.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_graphs/ks_dashboard_graphs.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_graphs/ks_dashboard_graphs.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_kpi_view/ks_dashboard_kpi.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_kpi_view/ks_dashboard_kpi.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_list_view/ks_dashboard_list.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_list_view/ks_dashboard_list.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_list_view/ks_new_list_view.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_tile_view/ks_dashboard_tile.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_tile_view/ks_dashboard_tile.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_to_do_item/editdialog.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_to_do_item/editdialog.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_to_do_item/ks_dashboard_to_do.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/components/ks_dashboard_to_do_item/ks_dashboard_to_do.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_ai_dash.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_dashboard_gridstack.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_dashboard_item_theme.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_dashboard_ninja.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_dashboard_ninja_item.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_dashboard_ninja_pro.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_dashboard_options.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_dn_filter.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_flower_view.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_funnel_view.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_icon_container_modal.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_input_bar.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_map_view.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_radial_chart.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_to_do_item.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/ks_toggle_icon.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/css/style.css create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/chatWizard.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/chatWizardIntegration.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/custom_filter.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/dashboards_overview.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/dnNavBarExtend.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/domainfix.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/file_uploader_extend.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/formView&NotificationExtend.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/ks_ai_dash_action.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/ks_custom_dialog.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/ks_dashboard_graph_ai.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/ks_dashboard_kpi_ai.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja_new.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/ks_dashboard_tile_ai.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/ks_dashboard_todo_ai.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/ks_dropdown.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/ks_filter_props_new.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/ks_global_functions.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/loader_screen.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/js/modalsExtend.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/Generate-ai.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/chartInsight.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/chartScreen.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/common.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/create_dashboard.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/explainAi.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/form_view.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/generateAI.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/header.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/ks_dn_gridstack.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/main.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/modal.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/overview.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/recentSearches.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/screen.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/scss/variable.scss create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/color_picker/ks_color_picker.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/color_picker/ks_color_picker.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_ai_keyword/ks_ai_keyword.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_ai_keyword/ks_ai_keyword.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_bullet_chart/ks_bullet_chart.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_bullet_chart/ks_bullet_chart.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_funnel_chart/ks_funnel_chart.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_funnel_chart/ks_funnel_chart.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_graph_view/ks_graph_view.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_graph_view/ks_graph_view.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_image_widget/ks_icon_dialog.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_image_widget/ks_icon_selector_dialog.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_image_widget/ks_image_widget.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_image_widget/ks_image_widget.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_item_type_selection/ks_item_type_selection.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_item_type_selection/ks_item_type_selection.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_kpi/ks_kpi.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_kpi/ks_kpi.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_list_view/ks_list_view.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_list_view/ks_list_view.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_map_view/ks_map_view.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_map_view/ks_map_view.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_new_dashboard_item_theme/ks_theme_component.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_new_dashboard_item_theme/ks_theme_component.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_tile/ks_tile.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_tile/ks_tile.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_to_do/ks_to_do.js create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/widgets/ks_to_do/ks_to_do.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/chat_wizard.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/custom_dialog_ai.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/custom_filter.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/filter_extend.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/form¬ificationExtend.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/ks_ai_dash_ninja.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/ks_dn_global_filter.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/ks_domain_props.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/modalsExtend.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/navBarExtend.xml create mode 100644 third_party_addons/ks_dashboard_ninja/static/src/xml/svg_templates.xml create mode 100644 third_party_addons/ks_dashboard_ninja/views/ks_ai_dashboard.xml create mode 100644 third_party_addons/ks_dashboard_ninja/views/ks_dashboard_action.xml create mode 100644 third_party_addons/ks_dashboard_ninja/views/ks_dashboard_csv_group_by.xml create mode 100644 third_party_addons/ks_dashboard_ninja/views/ks_dashboard_group_by.xml create mode 100644 third_party_addons/ks_dashboard_ninja/views/ks_dashboard_ninja_item_view.xml create mode 100644 third_party_addons/ks_dashboard_ninja/views/ks_dashboard_ninja_view.xml create mode 100644 third_party_addons/ks_dashboard_ninja/views/ks_import_dashboard_view.xml create mode 100644 third_party_addons/ks_dashboard_ninja/views/ks_key_fetch.xml create mode 100644 third_party_addons/ks_dashboard_ninja/views/ks_whole_ai_dashboard.xml create mode 100644 third_party_addons/ks_dashboard_ninja/views/res_settings.xml create mode 100644 third_party_addons/ks_dashboard_ninja/views/webExtend.xml create mode 100644 third_party_addons/ks_dashboard_ninja/wizard/__init__.py create mode 100644 third_party_addons/ks_dashboard_ninja/wizard/ks_create_dashboard_wiz.py create mode 100644 third_party_addons/ks_dashboard_ninja/wizard/ks_create_dashboard_wiz_view.xml create mode 100644 third_party_addons/ks_dashboard_ninja/wizard/ks_duplicate_dashboard_wiz.py create mode 100644 third_party_addons/ks_dashboard_ninja/wizard/ks_duplicate_dashboard_wiz_view.xml diff --git a/third_party_addons/ks_dashboard_ninja/__init__.py b/third_party_addons/ks_dashboard_ninja/__init__.py new file mode 100644 index 000000000..728ad5dac --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/__init__.py @@ -0,0 +1,15 @@ +# -*- coding: utf-8 -*- + +from . import models +from . import controllers +from . import common_lib +from . import wizard + +from odoo.api import Environment, SUPERUSER_ID + + +def uninstall_hook(env): + # env = Environment(cr, SUPERUSER_ID, {}) + for rec in env['ks_dashboard_ninja.board'].search([]): + rec.ks_dashboard_client_action_id.unlink() + rec.ks_dashboard_menu_id.unlink() diff --git a/third_party_addons/ks_dashboard_ninja/__manifest__.py b/third_party_addons/ks_dashboard_ninja/__manifest__.py new file mode 100644 index 000000000..0ebc903c3 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/__manifest__.py @@ -0,0 +1,188 @@ +# -*- coding: utf-8 -*- +{ + 'name': 'Dashboard Ninja with AI', + + 'summary': """ +Ksolves Dashboard Ninja gives you a wide-angle view of your business that you might have missed. Get smart visual data with interactive and engaging dashboards for your Odoo ERP. Odoo Dashboard, CRM Dashboard, Inventory Dashboard, Sales Dashboard, Account Dashboard, Invoice Dashboard, Revamp Dashboard, Best Dashboard, Odoo Best Dashboard, Odoo Apps Dashboard, Best Ninja Dashboard, Analytic Dashboard, Pre-Configured Dashboard, Create Dashboard, Beautiful Dashboard, Customized Robust Dashboard, Predefined Dashboard, Multiple Dashboards, Advance Dashboard, Beautiful Powerful Dashboards, Chart Graphs Table View, All In One Dynamic Dashboard, Accounting Stock Dashboard, Pie Chart Dashboard, Modern Dashboard, Dashboard Studio, Dashboard Builder, Dashboard Designer, Odoo Studio. Revamp your Odoo Dashboard like never before! It is one of the best dashboard odoo apps in the market. +""", + + 'description': """ +Dashboard Ninja v16.0, + Odoo Dashboard, + Dashboard, + Dashboards, + Odoo apps, + Dashboard app, + HR Dashboard, + Sales Dashboard, + inventory Dashboard, + Lead Dashboard, + Opportunity Dashboard, + CRM Dashboard, + POS, + POS Dashboard, + Connectors, + Web Dynamic, + Report Import/Export, + Date Filter, + HR, + Sales, + Theme, + Tile Dashboard, + Dashboard Widgets, + Dashboard Manager, + Debranding, + Customize Dashboard, + Graph Dashboard, + Charts Dashboard, + Invoice Dashboard, + Project management, + ksolves, + ksolves apps, + Ksolves India Ltd. + Ksolves India Limited, + odoo dashboard apps + odoo dashboard app + odoo dashboard module + odoo modules + dashboards + powerful dashboards + beautiful odoo dashboard + odoo dynamic dashboard + all in one dashboard + multiple dashboard menu + odoo dashboard portal + beautiful odoo dashboard + odoo best dashboard + dashboard for management + Odoo custom dashboard + odoo dashboard management + odoo dashboard apps + create odoo dashboard + odoo dashboard extension + odoo dashboard module +""", + + 'author': 'PRANAY', + + 'website': 'https://ftprotech.in/', + + 'maintainer': 'FTPROTECH', + + 'category': 'Services', + 'version': '18.0.1.0.1', + + 'support': 'sales@ksolves.com', + + 'images': ['static/description/DN 5.gif'], + + 'depends': ['base', 'web', 'base_setup', 'bus', 'base_geolocalize', 'mail'], + + 'data': [ + 'security/ir.model.access.csv', + 'security/ks_security_groups.xml', + 'data/ks_default_data.xml', + 'data/ks_mail_cron.xml', + 'data/dn_data.xml', + 'data/sequence.xml', + 'views/res_settings.xml', + 'views/ks_dashboard_ninja_view.xml', + 'views/ks_dashboard_ninja_item_view.xml', + 'views/ks_dashboard_group_by.xml', + 'views/ks_dashboard_csv_group_by.xml', + 'views/ks_dashboard_action.xml', + 'views/ks_import_dashboard_view.xml', + 'wizard/ks_create_dashboard_wiz_view.xml', + 'wizard/ks_duplicate_dashboard_wiz_view.xml', + 'views/ks_ai_dashboard.xml', + 'views/ks_whole_ai_dashboard.xml', + 'views/ks_key_fetch.xml', + 'views/webExtend.xml' + ], + + 'demo': ['demo/ks_dashboard_ninja_demo.xml'], + + 'assets': { + 'web.assets_backend': [ + 'ks_dashboard_ninja/static/src/css/ks_dashboard_ninja.scss', + '/ks_dashboard_ninja/static/lib/css/gridstack.min.css', + '/ks_dashboard_ninja/static/lib/css/awesomplete.css', + 'ks_dashboard_ninja/static/src/css/ks_dashboard_ninja_item.css', + 'ks_dashboard_ninja/static/src/css/ks_icon_container_modal.css', + 'ks_dashboard_ninja/static/src/css/ks_dashboard_item_theme.css', + 'ks_dashboard_ninja/static/src/css/ks_input_bar.css', + 'ks_dashboard_ninja/static/src/css/ks_ai_dash.css', + 'ks_dashboard_ninja/static/src/css/ks_dn_filter.css', + 'ks_dashboard_ninja/static/src/css/ks_toggle_icon.css', + 'ks_dashboard_ninja/static/src/css/ks_flower_view.css', + 'ks_dashboard_ninja/static/src/css/ks_map_view.css', + 'ks_dashboard_ninja/static/src/css/ks_funnel_view.css', + 'ks_dashboard_ninja/static/src/css/ks_dashboard_options.css', + '/ks_dashboard_ninja/static/lib/js/gridstack-h5.js', + 'ks_dashboard_ninja/static/src/js/ks_dashboard_ninja_new.js', + 'ks_dashboard_ninja/static/src/js/ks_global_functions.js', + 'ks_dashboard_ninja/static/lib/js/index.js', + '/ks_dashboard_ninja/static/lib/js/pdfmake.min.js', + 'ks_dashboard_ninja/static/lib/js/percent.js', + 'ks_dashboard_ninja/static/lib/js/pdf.min.js', + 'ks_dashboard_ninja/static/lib/js/print.min.js', + 'ks_dashboard_ninja/static/lib/js/Dataviz.js', + 'ks_dashboard_ninja/static/lib/js/Material.js', + 'ks_dashboard_ninja/static/lib/js/Moonrise.js', + 'ks_dashboard_ninja/static/lib/js/exporting.js', + 'ks_dashboard_ninja/static/lib/js/percent.js', + 'ks_dashboard_ninja/static/lib/js/Animated.js', + 'ks_dashboard_ninja/static/lib/js/worldLow.js', + 'ks_dashboard_ninja/static/lib/js/map.js', + 'ks_dashboard_ninja/static/lib/js/awesomplete.js', + 'ks_dashboard_ninja/static/src/js/ks_dashboard_ninja_new.js', + 'ks_dashboard_ninja/static/src/js/ks_global_functions.js', + 'ks_dashboard_ninja/static/lib/js/xy.js', + 'ks_dashboard_ninja/static/lib/js/radar.js', + 'ks_dashboard_ninja/static/src/css/style.css', + 'ks_dashboard_ninja/static/src/js/ks_filter_props_new.js', + 'ks_dashboard_ninja/static/src/js/domainfix.js', + 'ks_dashboard_ninja/static/src/js/ks_custom_dialog.js', + 'ks_dashboard_ninja/static/src/js/ks_dashboard_graph_ai.js', + 'ks_dashboard_ninja/static/src/js/ks_dashboard_kpi_ai.js', + 'ks_dashboard_ninja/static/src/js/ks_dashboard_tile_ai.js', + 'ks_dashboard_ninja/static/src/js/ks_dashboard_todo_ai.js', + 'ks_dashboard_ninja/static/src/css/ks_dashboard_ninja_pro.css', + 'ks_dashboard_ninja/static/src/css/ks_to_do_item.css', + 'ks_dashboard_ninja/static/src/xml/**/*', + 'ks_dashboard_ninja/static/src/css/ks_radial_chart.css', + 'ks_dashboard_ninja/static/src/js/ks_ai_dash_action.js', + 'ks_dashboard_ninja/static/src/components/**/*', + 'ks_dashboard_ninja/static/src/widgets/**/*', + 'ks_dashboard_ninja/static/src/scss/variable.scss', + 'ks_dashboard_ninja/static/src/scss/create_dashboard.scss', + 'ks_dashboard_ninja/static/src/scss/common.scss', + 'ks_dashboard_ninja/static/src/scss/header.scss', + 'ks_dashboard_ninja/static/src/scss/overview.scss', + 'ks_dashboard_ninja/static/src/scss/screen.scss', + '/ks_dashboard_ninja/static/src/scss/explainAi.scss', + '/ks_dashboard_ninja/static/src/scss/chartInsight.scss', + '/ks_dashboard_ninja/static/src/scss/recentSearches.scss', + '/ks_dashboard_ninja/static/src/scss/Generate-ai.scss', + '/ks_dashboard_ninja/static/src/scss/chartScreen.scss', + '/ks_dashboard_ninja/static/src/scss/generateAI.scss', + '/ks_dashboard_ninja/static/src/scss/form_view.scss', + 'ks_dashboard_ninja/static/src/js/file_uploader_extend.js', + 'ks_dashboard_ninja/static/src/js/formView&NotificationExtend.js', + 'ks_dashboard_ninja/static/src/js/modalsExtend.js', + 'ks_dashboard_ninja/static/src/js/loader_screen.js', + 'ks_dashboard_ninja/static/src/js/dashboards_overview.js', + 'ks_dashboard_ninja/static/src/js/chatWizard.js', + 'ks_dashboard_ninja/static/src/js/dnNavBarExtend.js', + 'ks_dashboard_ninja/static/src/js/chatWizardIntegration.js', + 'ks_dashboard_ninja/static/src/js/custom_filter.js', + 'ks_dashboard_ninja/static/src/js/ks_dropdown.js', + ], + }, + + 'external_dependencies': { + 'python': ['pandas', 'xlrd', 'openpyxl', 'gTTS', 'SQLAlchemy'] + }, + + 'uninstall_hook': 'uninstall_hook', +} diff --git a/third_party_addons/ks_dashboard_ninja/common_lib/__init__.py b/third_party_addons/ks_dashboard_ninja/common_lib/__init__.py new file mode 100644 index 000000000..7f95402fc --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/common_lib/__init__.py @@ -0,0 +1 @@ +from . import ks_date_filter_selections diff --git a/third_party_addons/ks_dashboard_ninja/common_lib/ks_date_filter_selections.py b/third_party_addons/ks_dashboard_ninja/common_lib/ks_date_filter_selections.py new file mode 100644 index 000000000..2f6be1d91 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/common_lib/ks_date_filter_selections.py @@ -0,0 +1,343 @@ +# -*- coding: utf-8 -*- + +from odoo.fields import datetime +from odoo import _ +from odoo.exceptions import ValidationError +from datetime import timedelta +import pytz +import os +import ast +import os.path +from dateutil import rrule +from dateutil.relativedelta import relativedelta +from odoo.tools.safe_eval import safe_eval + + + +def ks_get_date(ks_date_filter_selection, self, type): + try: + timezone = self._context.get('tz') + except Exception as e: + timezone = self.env.user.tz + + if not timezone: + ks_tzone = os.environ.get('TZ') + if ks_tzone: + timezone = ks_tzone + elif os.path.exists('/etc/timezone'): + ks_tzone = open('/etc/timezone').read() + timezone = ks_tzone[0:-1] + try: + datetime.now(pytz.timezone(timezone)) + except Exception as e: + raise ValidationError(_("Please set the local timezone.")) + + else: + raise ValidationError(_("Please set the local timezone.")) + + series = ks_date_filter_selection + if ks_date_filter_selection in ['t_fiscal_year', 'n_fiscal_year', 'ls_fiscal_year']: + function_name = globals()["ks_date_series_" + series.split("_")[0]] + return function_name(series.split("_")[1], timezone, type,self) + else: + function_name = globals()["ks_date_series_" + series.split("_")[0]] + return function_name(series.split("_")[1],timezone, type,self) + +def ks_date_series_td(ks_date_selection, timezone, type, self=None): + ks_function_name = globals()["ks_get_date_range_from_td_" + ks_date_selection] + return ks_function_name(timezone, type, self) + +def ks_get_date_range_from_td_year(timezone, type,self): + ks_date_data = {} + date = datetime.now(pytz.timezone(timezone)) + year = date.year + start_date = datetime(year, 1, 1) + end_date = date + if type == 'date': + ks_date_data["selected_start_date"] = datetime.strptime(start_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + ks_date_data["selected_end_date"] = datetime.strptime(end_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + else: + ks_date_data["selected_start_date"] = ks_convert_into_utc(start_date, timezone) + ks_date_data["selected_end_date"] = ks_convert_into_utc(end_date, timezone) + return ks_date_data + +def ks_get_date_range_from_td_month(timezone, type,self): + ks_date_data = {} + + date = datetime.now(pytz.timezone(timezone)) + year = date.year + month = date.month + start_date = datetime(year, month, 1) + end_date = date + if type == 'date': + ks_date_data["selected_start_date"] = datetime.strptime(start_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + ks_date_data["selected_end_date"] = datetime.strptime(end_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + else: + ks_date_data["selected_start_date"] = ks_convert_into_utc(start_date, timezone) + ks_date_data["selected_end_date"] = ks_convert_into_utc(end_date, timezone) + return ks_date_data +def ks_get_date_range_from_td_week(timezone, type,self): + ks_date_data = {} + lang = self.env['res.lang']._lang_get(self.env.user.lang) + week_start = lang.week_start + start_Date = rrule.weekday(int(week_start) - 1) + start_date = datetime.today() + relativedelta(weekday=start_Date(-1)) + end_date = datetime.now(pytz.timezone(timezone)) + start_date = datetime.strptime(start_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + if type == 'date': + ks_date_data["selected_start_date"] = start_date + end_date = datetime.strptime(end_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + ks_date_data["selected_end_date"] = end_date + else: + ks_date_data["selected_start_date"] = ks_convert_into_utc(start_date, timezone) + ks_date_data["selected_end_date"] = ks_convert_into_utc(end_date, timezone) + return ks_date_data +def ks_get_date_range_from_td_quarter(timezone, type,self): + ks_date_data = {} + date = datetime.now(pytz.timezone(timezone)) + year = date.year + quarter = int((date.month - 1) / 3) + 1 + start_date = datetime(year, 3 * quarter - 2, 1) + end_date = date + if type == 'date': + ks_date_data["selected_start_date"] = datetime.strptime(start_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + ks_date_data["selected_end_date"] = datetime.strptime(end_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + else: + ks_date_data["selected_start_date"] = ks_convert_into_utc(start_date, timezone) + ks_date_data["selected_end_date"] = ks_convert_into_utc(end_date, timezone) + return ks_date_data + + +# Last Specific Days Ranges : 7, 30, 90, 365 +def ks_date_series_l(ks_date_selection, timezone, type, self=None): + ks_date_data = {} + date_filter_options = { + 'day': 0, + 'week': 7, + 'month': 30, + 'quarter': 90, + 'year': 365, + 'past': False, + 'future': False + } + end_time = datetime.strptime(datetime.now(pytz.timezone(timezone)).strftime("%Y-%m-%d 23:59:59"), + '%Y-%m-%d %H:%M:%S') + start_time = datetime.strptime((datetime.now(pytz.timezone(timezone)) - timedelta( + days=date_filter_options[ks_date_selection])).strftime("%Y-%m-%d 00:00:00"), '%Y-%m-%d %H:%M:%S') + if type == 'date': + ks_date_data["selected_end_date"] = datetime.strptime(end_time.strftime("%Y-%m-%d"), '%Y-%m-%d') + ks_date_data["selected_start_date"] = datetime.strptime(start_time.strftime("%Y-%m-%d"), '%Y-%m-%d') + else: + ks_date_data["selected_end_date"] = ks_convert_into_utc(end_time, timezone) + ks_date_data["selected_start_date"] = ks_convert_into_utc(start_time, timezone) + + return ks_date_data + + +# Current Date Ranges : Week, Month, Quarter, year +def ks_date_series_t(ks_date_selection, timezone, type, self=None): + ks_function_name = globals()["ks_get_date_range_from_" + ks_date_selection] + return ks_function_name("current", timezone, type,self) + + +# Previous Date Ranges : Week, Month, Quarter, year +def ks_date_series_ls(ks_date_selection, timezone, type,self=None): + ks_function_name = globals()["ks_get_date_range_from_" + ks_date_selection] + return ks_function_name("previous", timezone, type,self) + + +# Next Date Ranges : Day, Week, Month, Quarter, year +def ks_date_series_n(ks_date_selection, timezone, type,self=None): + ks_function_name = globals()["ks_get_date_range_from_" + ks_date_selection] + return ks_function_name("next", timezone, type, self) + + +def ks_get_date_range_from_day(date_state, timezone, type,self): + ks_date_data = {} + + date = datetime.now(pytz.timezone(timezone)) + + if date_state == "previous": + date = date - timedelta(days=1) + elif date_state == "next": + date = date + timedelta(days=1) + start_date = datetime(date.year, date.month, date.day) + end_date = datetime(date.year, date.month, date.day) + timedelta(days=1, seconds=-1) + if type == 'date': + ks_date_data["selected_start_date"] = datetime.strptime(start_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + ks_date_data["selected_end_date"] = datetime.strptime(end_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + else: + ks_date_data["selected_start_date"] = ks_convert_into_utc(start_date,timezone) + ks_date_data["selected_end_date"] = ks_convert_into_utc(end_date,timezone) + return ks_date_data + + +def ks_get_date_range_from_week(date_state, timezone, type,self): + ks_date_data = {} + + # date = datetime.now(pytz.timezone(timezone)) + # ks_week = 0 + lang = self.env['res.lang']._lang_get(self.env.user.lang) + week_start = lang.week_start + start_Date = rrule.weekday(int(week_start) - 1) + start_date = datetime.today() + relativedelta(weekday=start_Date(-1)) + if date_state == "previous": + start_date = datetime.today() - relativedelta(weeks=1, weekday=start_Date(-1)) + elif date_state == "next": + start_date = datetime.today() - relativedelta(weeks=-1, weekday=start_Date(-1)) + + start_date = datetime.strptime(start_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + if type == 'date': + ks_date_data["selected_start_date"] = start_date + end_date = start_date + timedelta(days=6, hours=23, minutes=59, seconds=59, milliseconds=59) + ks_date_data["selected_end_date"] = end_date + else: + ks_date_data["selected_start_date"] = ks_convert_into_utc(start_date, timezone) + end_date = start_date + timedelta(days=6, hours=23, minutes=59, seconds=59, milliseconds=59) + ks_date_data["selected_end_date"] = ks_convert_into_utc(end_date, timezone) + return ks_date_data + +def ks_get_date_range_from_month(date_state, timezone, type,self): + ks_date_data = {} + + date = datetime.now(pytz.timezone(timezone)) + year = date.year + month = date.month + + if date_state == "previous": + month -= 1 + if month == 0: + month = 12 + year -= 1 + elif date_state == "next": + month += 1 + if month == 13: + month = 1 + year += 1 + + end_year = year + end_month = month + if month == 12: + end_year += 1 + end_month = 1 + else: + end_month += 1 + start_date = datetime(year, month, 1) + end_date = datetime(end_year, end_month, 1) - timedelta(seconds=1) + if type == 'date': + ks_date_data["selected_start_date"] = datetime.strptime(start_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + ks_date_data["selected_end_date"] = datetime.strptime(end_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + else: + ks_date_data["selected_start_date"] = ks_convert_into_utc(start_date, timezone) + ks_date_data["selected_end_date"] = ks_convert_into_utc(end_date, timezone) + return ks_date_data + + +def ks_get_date_range_from_quarter(date_state, timezone, type,self): + ks_date_data = {} + + date = datetime.now(pytz.timezone(timezone)) + year = date.year + quarter = int((date.month - 1) / 3) + 1 + + if date_state == "previous": + quarter -= 1 + if quarter == 0: + quarter = 4 + year -= 1 + elif date_state == "next": + quarter += 1 + if quarter == 5: + quarter = 1 + year += 1 + + start_date = datetime(year, 3 * quarter - 2, 1) + + month = 3 * quarter + remaining = int(month / 12) + end_date = datetime(year + remaining, month % 12 + 1, 1) - timedelta(seconds=1) + if type == 'date': + ks_date_data["selected_start_date"] = datetime.strptime(start_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + ks_date_data["selected_end_date"] = datetime.strptime(end_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + else: + ks_date_data["selected_start_date"] = ks_convert_into_utc(start_date, timezone) + ks_date_data["selected_end_date"] = ks_convert_into_utc(end_date, timezone) + return ks_date_data + + +def ks_get_date_range_from_year(date_state, timezone, type,self): + ks_date_data = {} + + date = datetime.now(pytz.timezone(timezone)) + year = date.year + + if date_state == "previous": + year -= 1 + elif date_state == "next": + year += 1 + start_date = datetime(year, 1, 1) + end_date = datetime(year + 1, 1, 1) - timedelta(seconds=1) + if type == 'date': + ks_date_data["selected_start_date"] = datetime.strptime(start_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + ks_date_data["selected_end_date"] = datetime.strptime(end_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + else: + ks_date_data["selected_start_date"] = ks_convert_into_utc(start_date, timezone) + ks_date_data["selected_end_date"] = ks_convert_into_utc(end_date, timezone) + return ks_date_data + +def ks_get_date_range_from_past(date_state, self_tz, type, self): + ks_date_data = {} + date = datetime.now(pytz.timezone(self_tz)) + if type == 'date': + ks_date_data["selected_end_date"] = datetime.strptime(date.strftime("%Y-%m-%d"), '%Y-%m-%d') + else: + ks_date_data["selected_end_date"] = ks_convert_into_utc(date, self_tz) + ks_date_data["selected_start_date"] = False + return ks_date_data + + +def ks_get_date_range_from_pastwithout(date_state, self_tz, type,self): + ks_date_data = {} + date = datetime.now(pytz.timezone(self_tz)) + hour = date.hour + 1 + date = date - timedelta(hours=hour) + date = datetime.strptime(date.strftime("%Y-%m-%d 23:59:59"), '%Y-%m-%d %H:%M:%S') + ks_date_data["selected_start_date"] = False + if type == 'date': + ks_date_data["selected_end_date"] = datetime.strptime(date.strftime("%Y-%m-%d"), '%Y-%m-%d') + else: + ks_date_data["selected_end_date"] = ks_convert_into_utc(date, self_tz) + return ks_date_data + + +def ks_get_date_range_from_future(date_state, self_tz, type,self): + ks_date_data = {} + date = datetime.now(pytz.timezone(self_tz)) + ks_date_data["selected_end_date"] = False + if type == 'date': + ks_date_data["selected_start_date"] = date.strptime(date.strftime("%Y-%m-%d"), '%Y-%m-%d') + else: + ks_date_data["selected_start_date"] = ks_convert_into_utc(date,self_tz) + return ks_date_data + + +def ks_get_date_range_from_futurestarting(date_state, self_tz, type,self): + ks_date_data = {} + date = datetime.now(pytz.timezone(self_tz)) + date = date + timedelta(days=1) + start_date = datetime.strptime(date.strftime("%Y-%m-%d 00:00:00"), '%Y-%m-%d %H:%M:%S') + if type == 'date': + ks_date_data["selected_start_date"] = datetime.strptime(start_date.strftime("%Y-%m-%d"), '%Y-%m-%d') + ks_date_data["selected_end_date"] = False + else: + ks_date_data["selected_start_date"] = ks_convert_into_utc(start_date, self_tz) + ks_date_data["selected_end_date"] = False + return ks_date_data + +def ks_convert_into_utc(datetime, timezone): + ks_tz = timezone and pytz.timezone(timezone) or pytz.UTC + return ks_tz.localize(datetime.replace(tzinfo=None), is_dst=False).astimezone(pytz.UTC).replace(tzinfo=None) + +def ks_convert_into_local(datetime, timezone): + ks_tz = timezone and pytz.timezone(timezone) or pytz.UTC + return pytz.UTC.localize(datetime.replace(tzinfo=None), is_dst=False).astimezone(ks_tz).replace(tzinfo=None) \ No newline at end of file diff --git a/third_party_addons/ks_dashboard_ninja/controllers/__init__.py b/third_party_addons/ks_dashboard_ninja/controllers/__init__.py new file mode 100644 index 000000000..798bc50c4 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/controllers/__init__.py @@ -0,0 +1,4 @@ +from . import ks_chart_export +from . import ks_list_export +from . import ks_dashboard_export +from . import ks_domain_fix \ No newline at end of file diff --git a/third_party_addons/ks_dashboard_ninja/controllers/ks_chart_export.py b/third_party_addons/ks_dashboard_ninja/controllers/ks_chart_export.py new file mode 100644 index 000000000..32510f67d --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/controllers/ks_chart_export.py @@ -0,0 +1,128 @@ +import io +import json +import logging +import operator + +from odoo.exceptions import ValidationError +from odoo.http import content_disposition, request +from odoo.tools import pycompat +from werkzeug.exceptions import InternalServerError + +from odoo import http +from odoo.addons.web.controllers.export import ExportXlsxWriter + +_logger = logging.getLogger(__name__) + +class KsChartExport(http.Controller): + + def base(self, data): + params = json.loads(data) + if not params.get('chart_data'): + raise ValidationError("Chart data not present") + + header,chart_data = operator.itemgetter('header','chart_data')(params) + chart_data = json.loads(chart_data) + + if isinstance(chart_data['labels'], list): + chart_data['labels'] = [str(label) for label in chart_data['labels']] + + chart_data['labels'].insert(0,'Measure') + columns_headers = chart_data['labels'] + import_data = [] + excel_fields = [] + + for dataset in chart_data['datasets']: + dataset['data'].insert(0, dataset['label']) + import_data.append(dataset['data']) + + + for i in range(len(columns_headers)): + ks_type_obj = {} + if (len(import_data)): + if isinstance(import_data[0][i],float): + ks_type_obj['type'] = 'float' + else: + ks_type_obj['type'] = '' + excel_fields.append((ks_type_obj)) + + + return request.make_response(self.from_data(excel_fields,columns_headers,import_data), + headers=[('Content-Disposition', + content_disposition(self.filename(header))), + ('Content-Type', self.content_type)], + # cookies={'fileToken': token} + ) + +class KsChartExcelExport(KsChartExport, http.Controller): + + # Excel needs raw data to correctly handle numbers and date values + raw_data = True + + @http.route('/ks_dashboard_ninja/export/chart_xls', type='http', auth="user") + def index(self, data): + try: + return self.base(data) + except Exception as exc: + _logger.exception("Exception during request handling.") + payload = json.dumps({ + 'code': 200, + 'message': "Odoo Server Error", + 'data': http.serialize_exception(exc) + }) + raise InternalServerError(payload) from exc + + @property + def content_type(self): + return 'application/vnd.ms-excel' + + def filename(self, base): + return base + '.xlsx' + + def from_data(self, fields, columns_headers, rows): + with ExportXlsxWriter(fields, columns_headers, len(rows)) as xlsx_writer: + for row_index, row in enumerate(rows): + for cell_index, cell_value in enumerate(row): + xlsx_writer.write_cell(row_index + 1, cell_index, cell_value) + + return xlsx_writer.value + + +class KsChartCsvExport(KsChartExport, http.Controller): + + @http.route('/ks_dashboard_ninja/export/chart_csv', type='http', auth="user") + def index(self, data): + try: + return self.base(data) + except Exception as exc: + _logger.exception("Exception during request handling.") + payload = json.dumps({ + 'code': 200, + 'message': "Odoo Server Error", + 'data': http.serialize_exception(exc) + }) + raise InternalServerError(payload) from exc + + @property + def content_type(self): + return 'text/csv;charset=utf8' + + def filename(self, base): + return base + '.csv' + + def from_data(self, fields,columns_headers, rows): + fp = io.BytesIO() + writer = pycompat.csv_writer(fp, quoting=1) + + writer.writerow(columns_headers) + + for data in rows: + row = [] + for d in data: + # Spreadsheet apps tend to detect formulas on leading =, + and - + if isinstance(d, str) and d.startswith(('=', '-', '+')): + d = "'" + d + + row.append(pycompat.to_text(d)) + writer.writerow(row) + + return fp.getvalue() diff --git a/third_party_addons/ks_dashboard_ninja/controllers/ks_dashboard_export.py b/third_party_addons/ks_dashboard_ninja/controllers/ks_dashboard_export.py new file mode 100644 index 000000000..f471ac4ac --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/controllers/ks_dashboard_export.py @@ -0,0 +1,84 @@ +import io +import json +import operator +import logging +from odoo import http +from odoo.http import request +from odoo.http import content_disposition,request +from werkzeug.exceptions import InternalServerError +_logger = logging.getLogger(__name__) + + +class KsDashboardExport(http.Controller): + + def base(self, data): + params = json.loads(data) + header, dashboard_data = operator.itemgetter('header', 'dashboard_data')(params) + return request.make_response(self.from_data(dashboard_data), + headers=[('Content-Disposition', + content_disposition(self.filename(header))), + ('Content-Type', self.content_type)], + # cookies={'fileToken': token} + ) + + +class KsDashboardJsonExport(KsDashboardExport, http.Controller): + + @http.route('/ks_dashboard_ninja/export/dashboard_json', type='http', auth="user") + def index(self, data): + try: + return self.base(data) + except Exception as exc: + _logger.exception("Exception during request handling.") + payload = json.dumps({ + 'code': 200, + 'message': "Odoo Server Error", + 'data': http.serialize_exception(exc) + }) + raise InternalServerError(payload) from exc + + @property + def content_type(self): + return 'text/csv;charset=utf8' + + def filename(self, base): + return base + '.json' + + def from_data(self, dashboard_data): + fp = io.StringIO() + fp.write(json.dumps(dashboard_data)) + + return fp.getvalue() + +class KsItemJsonExport(KsDashboardExport, http.Controller): + + @http.route('/ks_dashboard_ninja/export/item_json', type='http', auth="user") + def index(self, data): + try: + data = json.loads(data) + item_id = data["item_id"] + data['dashboard_data'] = request.env['ks_dashboard_ninja.board'].ks_export_item(item_id) + data = json.dumps(data) + return self.base(data) + except Exception as exc: + _logger.exception("Exception during request handling.") + payload = json.dumps({ + 'code': 200, + 'message': "Odoo Server Error", + 'data': http.serialize_exception(exc) + }) + raise InternalServerError(payload) from exc + + + @property + def content_type(self): + return 'text/csv;charset=utf8' + + def filename(self, base): + return base + '.json' + + def from_data(self, dashboard_data): + fp = io.StringIO() + fp.write(json.dumps(dashboard_data)) + + return fp.getvalue() diff --git a/third_party_addons/ks_dashboard_ninja/controllers/ks_domain_fix.py b/third_party_addons/ks_dashboard_ninja/controllers/ks_domain_fix.py new file mode 100644 index 000000000..b4fb31dcd --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/controllers/ks_domain_fix.py @@ -0,0 +1,21 @@ +from odoo.addons.web.controllers.domain import Domain + +from odoo import http, _ +from odoo.http import Controller, request +from odoo.tools.safe_eval import safe_eval + + +class ksdomainfix(Domain): + # to validate our uid and mycompany based domain + @http.route('/web/domain/validate', type='json', auth="user") + def validate(self, model, domain): + ks_uid_domain = str(domain) + if ks_uid_domain and "%UID" in ks_uid_domain: + ks_domain = ks_uid_domain.replace("%UID", str(request.env.user.id)) + return super().validate(model,safe_eval(ks_domain)) + elif ks_uid_domain and "%MYCOMPANY" in ks_uid_domain: + ks_domain = ks_uid_domain.replace("%MYCOMPANY", str(request.env.company.id)) + return super().validate(model,safe_eval(ks_domain)) + else: + return super().validate(model, domain) + diff --git a/third_party_addons/ks_dashboard_ninja/controllers/ks_list_export.py b/third_party_addons/ks_dashboard_ninja/controllers/ks_list_export.py new file mode 100644 index 000000000..bacb42abe --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/controllers/ks_list_export.py @@ -0,0 +1,213 @@ + +import re +import io +import json +import operator +import logging +from odoo.addons.web.controllers.export import ExportXlsxWriter +from odoo.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT, DEFAULT_SERVER_DATE_FORMAT , xlsxwriter +import datetime +from odoo import http +from odoo.http import content_disposition, request +from odoo.tools import pycompat +from ..common_lib.ks_date_filter_selections import ks_get_date, ks_convert_into_utc, ks_convert_into_local +import os +import pytz +from werkzeug.exceptions import InternalServerError +_logger = logging.getLogger(__name__) + + +class KsListExport(http.Controller): + + def base(self, data): + params = json.loads(data) + # header,list_data = operator.itemgetter('header','chart_data')(params) + header, list_data, item_id, ks_export_boolean, context, params = operator.itemgetter('header', 'chart_data', + 'ks_item_id', + 'ks_export_boolean', + 'context', 'params')( + params) + list_data = json.loads(list_data) + if ks_export_boolean: + item = request.env['ks_dashboard_ninja.item'].browse(int(item_id)) + ks_timezone = item._context.get('tz') or item.env.user.tz + if not ks_timezone: + ks_tzone = os.environ.get('TZ') + if ks_tzone: + ks_timezone = ks_tzone + elif os.path.exists('/etc/timezone'): + ks_tzone = open('/etc/timezone').read() + ks_timezone = ks_tzone[0:-1] + try: + datetime.now(pytz.timezone(ks_timezone)) + except Exception as e: + _logger.info('Please set the local timezone') + + else: + _logger.info('Please set the local timezone') + orderby = item.ks_sort_by_field.id + sort_order = item.ks_sort_by_order + ks_start_date = context.get('ksDateFilterStartDate', False) + ks_end_date = context.get('ksDateFilterEndDate', False) + ksDateFilterSelection = context.get('ksDateFilterSelection', False) + if context.get('allowed_company_ids', False): + item = item.with_context(allowed_company_ids=context.get('allowed_company_ids')) + if item.ks_data_calculation_type == 'query': + query_start_date = item.ks_query_start_date + query_end_date = item.ks_query_end_date + ks_query = str(item.ks_custom_query) + if ks_start_date and ks_end_date: + ks_start_date = datetime.datetime.strptime(ks_start_date,DEFAULT_SERVER_DATETIME_FORMAT) + ks_end_date = datetime.datetime.strptime(ks_end_date,DEFAULT_SERVER_DATETIME_FORMAT) + item = item.with_context(ksDateFilterStartDate=ks_start_date) + item = item.with_context(ksDateFilterEndDate=ks_end_date) + item = item.with_context(ksDateFilterSelection=ksDateFilterSelection) + + if item._context.get('ksDateFilterSelection', False): + ks_date_filter_selection = item._context['ksDateFilterSelection'] + if ks_date_filter_selection == 'l_custom': + item = item.with_context(ksDateFilterStartDate=ks_start_date) + item = item.with_context(ksDateFilterEndDate=ks_end_date) + item = item.with_context(ksIsDefultCustomDateFilter=False) + + else: + ks_date_filter_selection = item.ks_dashboard_ninja_board_id.ks_date_filter_selection + item = item.with_context(ksDateFilterStartDate=item.ks_dashboard_ninja_board_id.ks_dashboard_start_date) + item = item.with_context(ksDateFilterEndDate=item.ks_dashboard_ninja_board_id.ks_dashboard_end_date) + item = item.with_context(ksDateFilterSelection=ks_date_filter_selection) + item = item.with_context(ksIsDefultCustomDateFilter=True) + + if ks_date_filter_selection not in ['l_custom', 'l_none']: + ks_date_data = ks_get_date(ks_date_filter_selection, request, 'datetime') + item = item.with_context(ksDateFilterStartDate=ks_date_data["selected_start_date"]) + item = item.with_context(ksDateFilterEndDate=ks_date_data["selected_end_date"]) + + item_domain = params.get('ks_domain_1', []) + ks_chart_domain = item.ks_convert_into_proper_domain(item.ks_domain, item,item_domain) + # list_data = item.ks_fetch_list_view_data(item,ks_chart_domain, ks_export_all= + if list_data['type'] == 'ungrouped': + list_data = item.ks_fetch_list_view_data(item, ks_chart_domain, ks_export_all=True) + elif list_data['type'] == 'grouped': + list_data = item.get_list_view_record(orderby, sort_order, ks_chart_domain, ks_export_all=True) + elif item.ks_data_calculation_type == 'query': + if ks_start_date or ks_end_date: + query_start_date = ks_start_date + query_end_date = ks_end_date + ks_query_result = item.ks_get_list_query_result(ks_query, query_start_date, query_end_date, ks_offset=0, + ks_export_all=True) + list_data = item.ks_format_query_result(ks_query_result) + + # chart_data['labels'].insert(0,'Measure') + columns_headers = list_data['label'] + import_data = [] + + for dataset in list_data['data_rows']: + if not list_data['type'] == 'grouped': + for count, index in enumerate(dataset['ks_column_type']): + if index == 'datetime': + ks_converted_date = False + date_string = dataset['data'][count] + if dataset['data'][count]: + ks_converted_date = ks_convert_into_local(datetime.datetime.strptime(date_string, '%m/%d/%y %H:%M:%S'),ks_timezone) + dataset['data'][count] = ks_converted_date + for ks_count, val in enumerate(dataset['data']): + if isinstance(val, (float, int)): + if val >= 0: + try: + ks_precision = item.sudo().env.ref('ks_dashboard_ninja.ks_dashboard_ninja_precision').digits + except Exception as e: + ks_precision = 2 + dataset['data'][ks_count] = item.env['ir.qweb.field.float'].sudo().value_to_html(val, + {'precision': ks_precision}) + import_data.append(dataset['data']) + excel_fields = [] + for i in range(len(columns_headers)): + ks_type_obj = {} + if (len(import_data)): + if isinstance(import_data[0][i], float): + ks_type_obj['type'] = 'float' + else: + ks_type_obj['type'] = '' + excel_fields.append((ks_type_obj)) + + return request.make_response(self.from_data(excel_fields,columns_headers, import_data), + headers=[('Content-Disposition', + content_disposition(self.filename(header))), + ('Content-Type', self.content_type)], + # cookies={'fileToken': token} + ) + + +class KsListExcelExport(KsListExport, http.Controller): + + # Excel needs raw data to correctly handle numbers and date values + raw_data = True + + @http.route('/ks_dashboard_ninja/export/list_xls', type='http', auth="user") + def index(self, data): + try: + return self.base(data) + except Exception as exc: + _logger.exception("Exception during request handling.") + payload = json.dumps({ + 'code': 200, + 'message': "Odoo Server Error", + 'data': http.serialize_exception(exc) + }) + raise InternalServerError(payload) from exc + + @property + def content_type(self): + return 'application/vnd.ms-excel' + + def filename(self, base): + return base + '.xlsx' + + def from_data(self, fields, columns_headers, rows): + with ExportXlsxWriter(fields, columns_headers, len(rows)) as xlsx_writer: + for row_index, row in enumerate(rows): + for cell_index, cell_value in enumerate(row): + xlsx_writer.write_cell(row_index + 1, cell_index, cell_value) + + return xlsx_writer.value + + +class KsListCsvExport(KsListExport, http.Controller): + + @http.route('/ks_dashboard_ninja/export/list_csv', type='http', auth="user") + def index(self, data): + try: + return self.base(data) + except Exception as exc: + _logger.exception("Exception during request handling.") + payload = json.dumps({ + 'code': 200, + 'message': "Odoo Server Error", + 'data': http.serialize_exception(exc) + }) + raise InternalServerError(payload) from exc + + @property + def content_type(self): + return 'text/csv;charset=utf8' + + def filename(self, base): + return base + '.csv' + + def from_data(self, fields, column_headers,rows): + fp = io.BytesIO() + writer = pycompat.csv_writer(fp, quoting=1) + + writer.writerow(column_headers) + + for data in rows: + row = [] + for d in data: + # Spreadsheet apps tend to detect formulas on leading =, + and - + if isinstance(d, str) and d.startswith(('=', '-', '+')): + d = "'" + d + + row.append(pycompat.to_text(d)) + writer.writerow(row) + + return fp.getvalue() diff --git a/third_party_addons/ks_dashboard_ninja/data/dn_data.xml b/third_party_addons/ks_dashboard_ninja/data/dn_data.xml new file mode 100644 index 000000000..1345bd2d6 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/data/dn_data.xml @@ -0,0 +1,9 @@ + + + + + ks_dashboard_ninja.url + https://ftprotech.in/ + + + \ No newline at end of file diff --git a/third_party_addons/ks_dashboard_ninja/data/ks_default_data.xml b/third_party_addons/ks_dashboard_ninja/data/ks_default_data.xml new file mode 100644 index 000000000..54088d797 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/data/ks_default_data.xml @@ -0,0 +1,605 @@ + + + + + + + Blank + 0 + + + + Template 1 + [ + {"item_id":"ks_dashboard_ninja.ks_default_item_1", "data": {"x": 0, "y": 10, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_2", "data": {"x": 0, "y": 8, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_3", "data": {"x": 3, "y": 0, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_4", "data": {"x": 0, "y": 2, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_5", "data": {"x": 6, "y": 12, "w": 6, "h": 6}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_6", "data": {"x": 0, "y": 28, "w": 12, "h": + 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_7", "data": {"x": 0, "y": 43, "w": 5, "h": + 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_8", "data": {"x": 6, "y": 6, "w": 6, "h": 6}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_9", "data": {"x": 5, "y": 36, "w": 7, "h": 7}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_10", "data": {"x": 4, "y": 23, "w": 4, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_11", "data": {"x": 6, "y": 18, "w": 6, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_12", "data": {"x": 0, "y": 6, "w": 3, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_13", "data": {"x": 3, "y": 8, "w": 3, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_15", "data": {"x": 0, "y": 18, "w": 6, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_16", "data": {"x": 0, "y": 0, "w": 3, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_17", "data": {"x": 3, "y": 6, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_18", "data": {"x": 3, "y": 4, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_19", "data": {"x": 3, "y": 10, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_20", "data": {"x": 5, "y": 43, "w": 7, "h": + 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_21", "data": {"x": 0, "y": 12, "w": 6, "h": + 6}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_22", "data": {"x": 0, "y": 36, "w": 5, "h": + 7}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_23", "data": {"x": 0, "y": 32, "w": 12, "h": + 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_24", "data": {"x": 8, "y": 23, "w": 4, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_25", "data": {"x": 0, "y": 23, "w": 4, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_26", "data": {"x": 0, "y": 4, "w": 3, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_27", "data": {"x": 3, "y": 3, "w": 3, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_28", "data": {"x": 6, "y": 0, "w": 6, "h": + 6}} + ] + + 7 + + + + Template 2 + [ + {"item_id":"ks_dashboard_ninja.ks_default_item_1", "data": {"x": 0, "y": 0, "w": 2, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_2", "data": {"x": 4, "y": 0, "w": 2, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_3", "data": {"x": 2, "y": 0, "w": 2, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_4", "data": {"x": 8, "y": 0, "w": 2, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_5", "data": {"x": 4, "y": 18, "w": 8, "h": 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_6", "data": {"x": 8, "y": 27, "w": 4, "h": + 6}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_7", "data": {"x": 0, "y": 18, "w": 4, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_8", "data": {"x": 4, "y": 27, "w": 4, "h": + 6}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_9", "data": {"x": 4, "y": 13, "w": 8, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_10", "data": {"x": 0, "y": 23, "w": 4, "h": + 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_11", "data": {"x": 0, "y": 4, "w": 4, "h": + 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_12", "data": {"x": 6, "y": 0, "w": 2, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_13", "data": {"x": 10, "y": 2, "w": 2, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_15", "data": {"x":0, "y": 33, "w": 6, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_16", "data": {"x": 2, "y": 2, "w": 2, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_17", "data": {"x": 8, "y": 2, "w": 2, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_18", "data": {"x": 6, "y": 2, "w": 2, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_19", "data": {"x": 0, "y": 2, "w": 2, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_20", "data": {"x": 4, "y": 8, "w": 8, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_21", "data": {"x": 0, "y": 13, "w": 4, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_22", "data": {"x": 4, "y": 23, "w": 8, "h": + 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_23", "data": {"x": 6, "y": 33, "w": 6, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_24", "data": {"x": 4, "y": 4, "w": 8, "h": + 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_25", "data": {"x": 0, "y": 8, "w": 4, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_26", "data": {"x": 4, "y": 2, "w": 2, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_27", "data": {"x": 10, "y": 2, "w": 2, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_28", "data": {"x": 0, "y": 27, "w": 4, "h": + 6}} + ] + + 7 + + + + Template 3 + [ + {"item_id":"ks_dashboard_ninja.ks_default_item_1", "data": {"x": 0, "y": 0, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_2", "data": {"x": 6, "y": 0, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_3", "data": {"x": 3, "y": 0, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_4", "data": {"x": 0, "y": 2, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_5", "data": {"x": 7, "y": 2, "w": 5, "h": 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_6", "data": {"x": 0, "y": 28, "w": 12, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_7", "data": {"x": 4, "y": 14, "w": 4, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_8", "data": {"x": 0, "y": 33, "w": 3, "h": 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_9", "data": {"x": 8, "y": 23, "w": 4, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_10", "data": {"x": 8, "y": 14, "w": 4, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_11", "data": {"x": 0, "y": 23, "w": 4, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_12", "data": {"x": 9, "y": 0, "w": 3, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_13", "data": {"x": 3, "y": 2, "w": 4, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_15", "data": {"x":0, "y": 19, "w": 12, "h": + 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_16", "data": {"x": 0, "y": 8, "w": 3, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_17", "data": {"x": 3, "y": 4, "w": 4, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_18", "data": {"x": 0, "y": 12, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_19", "data": {"x": 0, "y": 4, "w": 3, "h": 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_20", "data": {"x": 3, "y": 6, "w": 9, "h": + 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_21", "data": {"x": 0, "y": 14, "w": 4, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_22", "data": {"x": 6, "y": 33, "w": 6, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_23", "data": {"x": 0, "y": 19, "w": 12, "h": + 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_24", "data": {"x": 3, "y": 10, "w": 9, "h": + 4}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_25", "data": {"x": 4, "y": 23, "w": 4, "h": + 5}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_26", "data": {"x": 0, "y": 8, "w": 3, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_27", "data": {"x": 0, "y": 6, "w": 3, "h": + 2}}, + {"item_id":"ks_dashboard_ninja.ks_default_item_28", "data": {"x": 3, "y": 33, "w": 3, "h": + 5}} + ] + + 7 + + + + + + + Tile (layout 1) + ks_tile + count + + [["id",">",150]] + bar-chart + blue + #FFE2E5,0.99 + #000000,0.99 + #000000,0.99 + layout1 + + + + + + Tile (layout 3) + ks_tile + count + + users + red + #FFF4DE,0.99 + #000000,0.99 + #000000,0.99 + layout3 + + + + + + Tile (layout 2) + ks_tile + count + + [["id","<",50]] + money + green + #DCFCE7,0.99 + #000000,0.99 + #000000,0.99 + layout2 + + + + + + Tile (layout 5) + ks_tile + count + + [["id","<",100]] + paper-plane + yellow + #F3E8FF,0.99 + #000000,0.99 + #000000,0.99 + layout5 + + + + + + Bar Chart + sum + relational_type + + + + + [["id","<",40]] + dark + ks_bar_chart + + + + + + + Line Chart + sum + relational_type + + + + + [["id","<",10]] + dark + ks_line_chart + + + + + + Pie Chart + sum + relational_type + + + + [["id","<",10]] + ks_pie_chart + + + + + list view (Un-Grouped) + sum + relational_type + + grouped + + + [["id","<",10]] + ks_list_view + + + + Horizontal Bar + sum + relational_type + + + + [["id","<",10]] + material + ks_horizontalBar_chart + + + + Polar Area + sum + relational_type + + + + [["id","<",10]] + moonrise + ks_polarArea_chart + + + + Doughnut chart + sum + relational_type + + + + [["id","<",10]] + moonrise + 100 + 1 + monetary + ks_doughnut_chart + + + + Tile (layout 4) + ks_tile + count + + [["id","<",50]] + shopping-cart + red + #FFE2E5,0.99 + #000000,0.99 + #000000,0.99 + layout4 + + + + Tile (layout 6) + ks_tile + count + + [["id","<",100]] + car + red + #FFF4DE,0.53 + #000000,0.70 + #000000,0.99 + layout6 + + + + Pie Chart + sum + relational_type + + + + [["id","<",10]] + dark + ks_pie_chart + + + + Area Chart + sum + relational_type + + + + default + ks_area_chart + + + + + Kpi Ratio + ks_kpi + count + count + + + Ratio + [["id","<",100]] + user + blue + #DCFCE7,0.99 + #000000,0.99 + #000000,0.99 + + + + Kpi ( Percentage) + ks_kpi + count + count + + + [["id","<",100]] + Percentage + paper-plane + red + #F3E8FF,0.99 + #000000,0.99 + #000000,0.99 + + + + Kpi ( Number) + ks_kpi + count + count + + + Number + 1 + [["id","<",100]] + Sum + money + green + #F3E8FF,0.63 + #000000,0.99 + #000000,0.99 + + + + Kpi (sum) + ks_kpi + count + count + + + Sum + [["id","<",100]] + bar-chart + yellow + #FFF4DE,0.99 + #000000,0.99 + #000000,0.99 + + + + Bar Chart With Data Values + sum + relational_type + + + + [["id","<",40]] + default + ks_bar_chart + 1 + monetary + + + + + Semi Circle Pie Chart + sum + relational_type + + + + 1 + material + 10 + 1 + monetary + ks_pie_chart + + + + Horizontal Bar(sub-group) + sum + relational_type + + + + + default + [["id","<",10]] + 1 + monetary + ks_horizontalBar_chart + + + + Area Chart with data values + sum + relational_type + + + + material + 25 + 1 + monetary + ks_area_chart + + + + Line Chart with values + sum + relational_type + + + + moonrise + 10 + 1 + monetary + ks_line_chart + + + + Doughnut semi circle + sum + relational_type + + + + default + 1 + 25 + 1 + monetary + ks_doughnut_chart + + + + Kpi 26(Average) + ks_kpi + + + indian + average + average + + + Number + 1 + [["id","<",100]] + Sum + money + blue + #DCFCE7,0.99 + #000000,0.99 + #000000,0.99 + + + + Kpi (previous) + ks_kpi + count + + [["id","<",100]] + 1 + t_week + money + green + #FFE2E5,0.59 + #000000,0.99 + #000000,0.99 + + + + list view (grouped) + sum + relational_type + + + ungrouped + + + [["id","<",10]] + ks_list_view + + + + + ks_bar_chart + + + + + ks_pie_chart + + + + + + + + Dashboard Ninja Decimal Precision + + + + \ No newline at end of file diff --git a/third_party_addons/ks_dashboard_ninja/data/ks_mail_cron.xml b/third_party_addons/ks_dashboard_ninja/data/ks_mail_cron.xml new file mode 100644 index 000000000..c19bbc225 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/data/ks_mail_cron.xml @@ -0,0 +1,11 @@ + + + + Kpi mail cron + 1 + days + + model.check_target() + code + + \ No newline at end of file diff --git a/third_party_addons/ks_dashboard_ninja/data/sequence.xml b/third_party_addons/ks_dashboard_ninja/data/sequence.xml new file mode 100644 index 000000000..26403ed40 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/data/sequence.xml @@ -0,0 +1,11 @@ + + + + + Dashboard Seq + ks_dashboard_ninja.item + 2 + + + + \ No newline at end of file diff --git a/third_party_addons/ks_dashboard_ninja/demo/ks_dashboard_ninja_demo.xml b/third_party_addons/ks_dashboard_ninja/demo/ks_dashboard_ninja_demo.xml new file mode 100644 index 000000000..1826f0e89 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/demo/ks_dashboard_ninja_demo.xml @@ -0,0 +1,44 @@ + + + + + + + + Template1 Dashboard + Template1 + + + 1 + + + + + My Dashboard + Locked + My Dashboard + + 1 + + + + + + Template2 Dashboard + Template2 + + + 1 + + + + + Template3 Dashboard + Template3 + + + 1 + + + + diff --git a/third_party_addons/ks_dashboard_ninja/i18n/en_US.po b/third_party_addons/ks_dashboard_ninja/i18n/en_US.po new file mode 100644 index 000000000..9b3be0ea1 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/i18n/en_US.po @@ -0,0 +1,3070 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ks_dashboard_ninja +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 14.0\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2021-05-26 14:51+0000\n" +"PO-Revision-Date: 2021-05-26 14:51+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_dashboard_board_id +msgid "" +"\n" +" Items Configuration and their position in the dashboard will be copied from the selected dashboard \n" +" and will be saved as template.\n" +" " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_previous_period +msgid " Compare With Previous Period " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_update_items_data +msgid " Data will be refreshed after the selected interval." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_relation_groupby +msgid " Define the x-axis of the graph. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_year_period +msgid " Display the record for the same Date field for the last year. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_data_value +msgid " Display value on the graph. . " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_pastwithout_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_pastwithout_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_pastwithout_now +msgid " Past Excluding Today" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_compare_period +msgid "" +" Provide the number of Date Filter Selection you want to include while " +"displaying the record." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_data_limit +msgid " Records to be displayed on the graph" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_background_color +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_header_bg_color +msgid " Select the background color with transparency. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_fields +msgid " Select the fields you want to display in the list. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_layout +msgid " Select the layout to display records. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_sort_by_order +msgid " Select the order of the sorting. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_target_view +msgid " Select the view to compare target with data." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_relation_sub_groupby +msgid " Sub Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_auto_update_type__ks_update_interval +msgid " Update after the selected interval" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__60000 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_update_items_data__60000 +msgid "1 minute" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__600000 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_update_items_data__600000 +msgid "10 minute" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__15000 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_update_items_data__15000 +msgid "15 Seconds" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__120000 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_update_items_data__120000 +msgid "2 minute" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__30000 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_update_items_data__30000 +msgid "30 Seconds" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__45000 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_update_items_data__45000 +msgid "45 Seconds" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__300000 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_update_items_data__300000 +msgid "5 minute" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py:0 +#, python-format +msgid "" +"

\n" +" You can find all items related to Dashboard Here.

\n" +" " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__ks_action +msgid "Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_item_action_field +msgid "Action Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_action_lines +msgid "Action Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#, python-format +msgid "Action field: {} cannot be aggregated by {}" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_actions +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Actions" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_active +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_is_active +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Active" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__ks_active +msgid "Active Description" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Add" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Add Item" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Add a Line" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Add a Section" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dn_global_filter.xml:0 +#, python-format +msgid "Add a condition" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Add a filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Add a separator" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Add button" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Advance Configuration" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "" +"All Target Lines Changes Will be reflected on Chart after saving the record " +"and pagination will be ignore ." +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_none +#, python-format +msgid "All Time" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_import_dashboard.js:0 +#, python-format +msgid "All items can not be Imported" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dn_global_filter.xml:0 +#, python-format +msgid "Apply" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_import_dashboard.js:0 +#: code:addons/ks_dashboard_ninja/static/src/js/ks_import_dashboard.js:0 +#, python-format +msgid "Archive" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_import_dashboard.js:0 +#: code:addons/ks_dashboard_ninja/static/src/js/ks_import_dashboard.js:0 +#, python-format +msgid "Are you sure that you want to archive all the selected records?" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#, python-format +msgid "Are you sure you want to remove this item?" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_to_do_dashboard.js:0 +#, python-format +msgid "Are you sure you want to remove this task?" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_area_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_area_chart +#, python-format +msgid "Area Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_sort_by_order__asc +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_sort_by_order__asc +msgid "Ascending" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Auto Update" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_auto_update_type +msgid "Auto Update Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_data_count_type__average +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type_2__average +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type__average +msgid "Average" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_background_color +msgid "Background Color" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_bar_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_bar_chart +#, python-format +msgid "Bar Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_base +msgid "Base" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Below action will be performed at the end of the Drill Down Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_action +msgid "Cancel" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#, python-format +msgid "" +"Cannot create target lines when Group By Date field is set to have " +"aggregation in Minute and Hour case." +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#, python-format +msgid "" +"Cannot set aggregation having Date time (Hour, Minute) when target lines per" +" date are being used. To proceed this, first delete target lines" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "" +"Changing Layout midway will set the default icon colour and font colour for " +"selected layout." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_item_color +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Chart Color Palette" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_data +msgid "Chart Data in string form" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_live_pop_up +msgid "Checkbox to enable notification after every update. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_previous_period +msgid "" +"Checkbox to show comparison between the data of present day and the previous" +" selected period. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_icon_select +msgid "Choose the Icon option. " +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Clear" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_is_client_action +msgid "Client Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_client_action +msgid "Client Item Action" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_to_do_dashboard.js:0 +#: code:addons/ks_dashboard_ninja/static/src/js/ks_to_do_dashboard.js:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "Close" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_format__colombian +msgid "Colombian Peso Format" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#, python-format +msgid "Color Palette" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "Coming Soon in Future :)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_company_id +msgid "Company" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.configuration_menu +msgid "Configuration" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_item_color__cool +msgid "Cool" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_data_count_type__count +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type_2__count +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type__count +msgid "Count" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Count..." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__create_uid +msgid "Created by" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__create_date +msgid "Created on" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_cumulative +msgid "Cumulative As Line" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_cumulative_field +msgid "Cumulative Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py:0 +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py:0 +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py:0 +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py:0 +#, python-format +msgid "" +"Current Json File is not properly formatted according to Dashboard Ninja " +"Model." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board_template__ks_template_type__ks_custom +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_unit_selection__custom +msgid "Custom" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dn_global_filter.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_custom +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_custom +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_custom +#, python-format +msgid "Custom Filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Custom Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_calculation_type__query +msgid "Custom Query" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Customize Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#, python-format +msgid "Customize Item" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__ks_dashboard_board_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_dashboard_board_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_dashboard_board_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_ninja_board_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.child_board_tree +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item +msgid "Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_custom_filters_ids +msgid "Dashboard Custom Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +msgid "Dashboard Defined Filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_dashboard_item_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__ks_dashboard_item +msgid "Dashboard Item" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_action +msgid "Dashboard Item Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_date_groupby +msgid "Dashboard Item Chart Group By Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_date_sub_groupby +msgid "Dashboard Item Chart Sub Group By Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_item_type +msgid "Dashboard Item Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py:0 +#: model:ir.actions.act_window,name:ks_dashboard_ninja.item_action_window +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_items_ids +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__ks_dashboard_item_ids +#, python-format +msgid "Dashboard Items" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.child_board_tree +msgid "Dashboard Layout" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.dashboard_layout_menu +msgid "Dashboard Layouts" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.board_form_tree_action_window +msgid "Dashboard Manager" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__name +msgid "Dashboard Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_board +msgid "Dashboard Ninja" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_child_board +msgid "Dashboard Ninja Child Board" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_board_custom_filters +msgid "Dashboard Ninja Custom Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_board_defined_filters +msgid "Dashboard Ninja Defined Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_ninja_dashboard_item_action +msgid "Dashboard Ninja Item Actions" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_item_action +msgid "Dashboard Ninja Items Action Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_item_goal +msgid "Dashboard Ninja Items Goal Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.module.category,name:ks_dashboard_ninja.ks_dashboard_ninja_security_groups +msgid "Dashboard Ninja Rights" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_board_template +msgid "Dashboard Ninja Template" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_item +msgid "Dashboard Ninja items" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_defined_filters_ids +msgid "Dashboard Predefined Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.template_tree_action_window +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_default_template +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_board_template_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_template_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_template_tree +msgid "Dashboard Template" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.layout_tree_action_window +msgid "Dashboard layout" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.dashboard_menu +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Dashboards" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data #2" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data Calculation" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_calculation_type +msgid "Data Calculation Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_kpi_type__layout_2 +msgid "Data Comparison" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_measure_field_2 +msgid "Data Points displayed with a line in the graph. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_data_count_type +msgid "Data Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_cumulative_field +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_measure_field +msgid "Data points to be selected." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__ks_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_model_id +msgid "" +"Data source to fetch and read the data for the creation of dashboard items. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__ks_goal_date +msgid "Date" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#, python-format +msgid "Date Filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_field +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Date Filter Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_selection +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Date Filter Selection" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__day +msgid "Day" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_item_color__default +msgid "Default" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py:0 +#, python-format +msgid "Default Dashboard can't be deleted." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_date_filter_selection +msgid "Default Date Filter" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_widget_toggle.xml:0 +#, python-format +msgid "Default Icons" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_calculation_type__custom +msgid "Default Query" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_set_interval +msgid "Default Update Interval" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_extension +msgid "Define conditions for filter to write manually" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_domain +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain +msgid "Define conditions for filter. " +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_import_dashboard.js:0 +#: code:addons/ks_dashboard_ninja/static/src/js/ks_import_dashboard.js:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dn_global_filter.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dn_global_filter.xml:0 +#, python-format +msgid "Delete" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_sort_by_order__desc +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_sort_by_order__desc +msgid "Descending" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__ks_description +msgid "Description" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Deviation Field" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_quick_edit_view.xml:0 +#, python-format +msgid "Discard" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Discard Changes" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Display" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__display_name +msgid "Display Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__display_type +msgid "Display Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_unit +msgid "Display the unit of the data." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_domain +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Domain" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_extension +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Domain Extension" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__ks_domain_field_id +msgid "Domain Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_domain_temp +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_temp +msgid "Domain Substitute" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_filters.py:0 +#, python-format +msgid "Domain can not be empty" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_doughnut_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_doughnut_chart +#, python-format +msgid "Doughnut Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#, python-format +msgid "Drill Up" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#: model:ir.actions.server,name:ks_dashboard_ninja.ks_duplicate_dashboard +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_ninja_dashboard_item_action__ks_action__duplicate +#, python-format +msgid "Duplicate" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Edit Layout" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_to_do_dashboard.js:0 +#, python-format +msgid "Edit Task" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_goal_enable +msgid "Enable Target" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_end_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_item_end_date +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "End Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_format__global +msgid "English Format" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_unit +msgid "Enter Unit" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_data_formatting__exact +msgid "Exact" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_format__exact +msgid "Exact Value" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_import_dashboard.js:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#, python-format +msgid "Export" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_export_all_records +msgid "Export All Records" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#, python-format +msgid "Export Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_import_dashboard.js:0 +#, python-format +msgid "Export Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#, python-format +msgid "Export Item" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#, python-format +msgid "Export List" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#, python-format +msgid "Export to CSV" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#, python-format +msgid "Export to Excel" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "Fields Required : Name, Model, Icon (Default or Custom Upload), Layout" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_fields +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Fields to show in list" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_fill_temporal +msgid "Fill Temporal Value" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dn_global_filter.xml:0 +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#, python-format +msgid "Filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__name +msgid "Filter Label" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "Font Awesome 4.7.0" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_font_color +msgid "Font Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_data_formatting +msgid "Format" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_quick_edit_view.xml:0 +#, python-format +msgid "Full Settings" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_future_starting_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_future_starting_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_future_starting_now +#, python-format +msgid "Future Starting Now" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_futurestarting_tomorrow +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_futurestarting_tomorrow +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_futurestarting_tomorrow +#, python-format +msgid "Future Starting Tomorrow" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__sequence +msgid "" +"Gives the sequence order when displaying a list of payment terms lines." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_data_formatting__global +msgid "Global" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Goal Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_graph_preview +msgid "Graph Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_group_access +msgid "Group Access" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_relation_groupby +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_item_action_date_groupby +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Group By Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#, python-format +msgid "Groupby Field aggregation" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#, python-format +msgid "Groupby field: {} cannot be aggregated by {}" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_list_view_type__grouped +msgid "Grouped" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Groups/Dimensions" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__ks_to_do_header +msgid "Header" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_header_bg_color +msgid "Header Background Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_hide_legend +msgid "Hide all legend from the chart item" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_horizontalbar_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_horizontalbar_chart +#, python-format +msgid "Horizontal Bar Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__hour +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__hour +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__hour +msgid "Hour" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__id +msgid "ID" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_default_icon +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Icon" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_default_icon_color +msgid "Icon Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_icon_select +msgid "Icon Option" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_import_list_view_template.xml:0 +#, python-format +msgid "Import Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Import Item" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_compare_period +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Include Period" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_data_formatting__indian +msgid "Indian" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_format__indian +msgid "Indian Format" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#, python-format +msgid "Invalid Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_active +msgid "Is Selected" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Item Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_gridstack_config +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_gridstack_config +msgid "Item Configurations" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#, python-format +msgid "Item Duplicated" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#, python-format +msgid "Item Moved" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_chart_type +msgid "Item Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_update_items_data +msgid "Item Update Interval" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Item Update Interval.." +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_kpi +#, python-format +msgid "KPI" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_kpi_data +msgid "KPI Data" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_extension_2 +msgid "KPI Domain Extension" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_compare_period_2 +msgid "KPI Include Period" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count_2 +msgid "KPI Record Count" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_year_period_2 +msgid "KPI Same Period Previous Years" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_kpi_type__layout_1 +msgid "KPI With Target" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_comparison +msgid "Kpi Data Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_field_2 +msgid "Kpi Date Filter Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_selection_2 +msgid "Kpi Date Filter Selection" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_2 +msgid "Kpi Domain" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_2_temp +msgid "Kpi Domain Substitute" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_item_end_date_2 +msgid "Kpi End Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_kpi_type +msgid "Kpi Layout" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_id_2 +msgid "Kpi Model" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_name_2 +msgid "Kpi Model Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_kpi_preview +msgid "Kpi Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_field_2 +msgid "Kpi Record Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count_type_2 +msgid "Kpi Record Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_item_start_date_2 +msgid "Kpi Start Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_groupby_type +msgid "Ks Chart Groupby Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_sub_groupby_type +msgid "Ks Chart Sub Groupby Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_child_dashboard_ids +msgid "Ks Child Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_client_action_id +msgid "Ks Dashboard Client Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_menu_id +msgid "Ks Dashboard Menu" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_state +msgid "Ks Dashboard State" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dn_header_lines +msgid "Ks Dn Header Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__ks_dn_item_id +msgid "Ks Dn Item" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_gridstack_config +msgid "Ks Gridstack Config" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_isDateFilterApplied +msgid "Ks Isdatefilterapplied" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_item_action_field_type +msgid "Ks Item Action Field Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_item_count +msgid "Ks Item Count" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_many2many_field_ordering +msgid "Ks Many2Many Field Ordering" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__ks_to_do_description_lines +msgid "Ks To Do Description Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__ks_to_do_header_id +msgid "Ks To Do Header" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_month +#, python-format +msgid "Last 30 days" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_year +#, python-format +msgid "Last 365 days" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_week +#, python-format +msgid "Last 7 days" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_quarter +#, python-format +msgid "Last 90 days" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_day +#, python-format +msgid "Last Day" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board____last_update +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters____last_update +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters____last_update +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template____last_update +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board____last_update +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item____last_update +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action____last_update +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal____last_update +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action____last_update +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description____last_update +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers____last_update +msgid "Last Modified on" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_month +#, python-format +msgid "Last Month" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_quarter +#, python-format +msgid "Last Quarter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__write_date +msgid "Last Updated on" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_week +#, python-format +msgid "Last Week" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_year +#, python-format +msgid "Last Year" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_layout +msgid "Layout" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout1 +msgid "Layout 1" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout2 +msgid "Layout 2" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout3 +msgid "Layout 3" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout4 +msgid "Layout 4" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout5 +msgid "Layout 5" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout6 +msgid "Layout 6" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Layout Coming Soon" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Layout..." +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_line_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_line_chart +#, python-format +msgid "Line Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_measure_field_2 +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Line Measure" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_list_view +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_list_view +#, python-format +msgid "List View" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_data +msgid "List View Data in JSon" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_group_fields +msgid "List View Grouped Fields" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_preview +msgid "List View Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_type +msgid "List View Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_unit +msgid "Maximum limit 5 characters, for ex: km, m" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_measure_field +msgid "Measure 1" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Measures" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_menu_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_dashboard_menu_name +msgid "Menu Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_menu_sequence +msgid "Menu Sequence" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__minute +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__minute +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__minute +msgid "Minute" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__ks_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_model_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Model" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_model_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_name +msgid "Model Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Model..." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_unit_selection__monetary +msgid "Monetary" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__month +msgid "Month" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__month_year +msgid "Month-Year" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#, python-format +msgid "More Info" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#: model:ir.actions.server,name:ks_dashboard_ninja.ks_move_dashboard +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_ninja_dashboard_item_action__ks_action__move +#, python-format +msgid "Move" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#, python-format +msgid "Move/Duplicate" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.client,name:ks_dashboard_ninja.board_dashboard_action_window +#: model:ir.ui.menu,name:ks_dashboard_ninja.board_menu_root +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_tree +msgid "My Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__name +msgid "Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_company_id +msgid "" +"Name of the company for which analytics will be displayed in the dashboard. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Name..." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_item_color__neon +msgid "Neon" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_to_do_dashboard.js:0 +#, python-format +msgid "New Task" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#, python-format +msgid "Next" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_day +#, python-format +msgid "Next Day" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_month +#, python-format +msgid "Next Month" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_quarter +#, python-format +msgid "Next Quarter" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_week +#, python-format +msgid "Next Week" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_year +#, python-format +msgid "Next Year" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#, python-format +msgid "No Data Present" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#, python-format +msgid "No Section Available." +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#, python-format +msgid "No Tasks Available" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_widget_toggle.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_none +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_none +#, python-format +msgid "None" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "Note :" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "Note:" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_widget_toggle.xml:0 +#, python-format +msgid "Number" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_format +msgid "Number System" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_pagination_limit +msgid "Pagination Limit" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#, python-format +msgid "Pagination limit value cannot be Negative or Zero" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#, python-format +msgid "Past Excluding Today" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_past_until_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_past_until_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_past_until_now +#, python-format +msgid "Past Till Now" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_widget_toggle.xml:0 +#, python-format +msgid "Percentage" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_pie_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_pie_chart +#, python-format +msgid "Pie Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py:0 +#, python-format +msgid "" +"Please Install the Module which contains the following Model : %s " +"ks_model_id" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#, python-format +msgid "Please chose any Data Type!" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#, python-format +msgid "Please enter start date and end date" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/lib/ks_date_filter_selections.py:0 +#: code:addons/ks_dashboard_ninja/lib/ks_date_filter_selections.py:0 +#, python-format +msgid "Please set the local timezone." +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "" +"Please use Font Awesome 4.7.0 icons only. E.g. 'fa-bell' or 'bell'.\n" +" For more information visit" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_polararea_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_polararea_chart +#, python-format +msgid "Polar Area Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Pre Defined Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board_template__ks_template_type__ks_default +msgid "Predefined" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_preview +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#, python-format +msgid "Previous" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Print" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_widget_toggle.xml:0 +#, python-format +msgid "Progress Bar" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__quarter +msgid "Quarter" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#, python-format +msgid "Quick Customize" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_widget_toggle.xml:0 +#, python-format +msgid "Ratio" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count +msgid "Record Count" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_field +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Record Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Record Field..." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_data_limit +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_record_limit +msgid "Record Limit" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_data_limit_visibility +msgid "Record Limit Data Visibility" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count_type +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Record Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Record Value" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_actions +msgid "Redirects you to the selected view. " +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dn_global_filter.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dn_global_filter.xml:0 +#, python-format +msgid "Remove" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#, python-format +msgid "Remove Item" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_year_period +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Same Period Previous Years" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_quick_edit_view.xml:0 +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_action +#, python-format +msgid "Save" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Save Changes" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Save Changes as a New Layout" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#, python-format +msgid "Save as Image" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Save as New Layout" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#, python-format +msgid "Save as PDF" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_item_search_view +msgid "Search Items" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "Search fa-icon.." +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "Search through site content" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board_defined_filters__display_type__line_section +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Section" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Sections" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "Select" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_pro.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_to_do_template.xml:0 +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_dashboard_ninja_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__ks_dashboard_ninja_id +#, python-format +msgid "Select Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__ks_dashboard_ninja_ids +msgid "Select Dashboards" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "Select Icon" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "Select Icons" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_unit_selection +msgid "Select Unit Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_selection +msgid "Select interval of the records to be displayed. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_item_theme +msgid "Select the color theme for the display. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_type +msgid "Select the desired list view type. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_sort_by_field +msgid "Select the desired sorting preference. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_item_color +msgid "Select the display preference. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_field +msgid "Select the field for which Date Filter should be applicable." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_font_color +msgid "Select the font color. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_default_icon +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_default_icon_color +msgid "Select the icon to be displayed. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_item_type +msgid "Select the required type of dashboard to display. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_relation_sub_groupby +msgid "Select the second level of grouping. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_calculation_type +msgid "Select the type of calculation you want to perform on the data." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_unit_selection +msgid "Select the unit to be assigned to the value. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_auto_update_type +msgid "Select the update type." +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#, python-format +msgid "Selected item is duplicated to ." +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#, python-format +msgid "Selected item is moved to ." +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_domain_fix.js:0 +#, python-format +msgid "Selected records" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_semi_circle_chart +msgid "Semi Circle Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +msgid "Separator Name (eg. Order States, Deadlines)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__sequence +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__sequence +msgid "Sequence" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Set Current Layout" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Set Update Interval" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_unit +msgid "Show Custom Unit" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_data_value +msgid "Show Data Value" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:res.groups,name:ks_dashboard_ninja.ks_dashboard_ninja_group_manager +msgid "Show Full Dashboard Features" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_hide_legend +msgid "Show Legend" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_live_pop_up +msgid "Show Live Update Pop Up" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_records +msgid "Show Records" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_goal_bar_line +msgid "Show Target As Line" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_top_menu_id +msgid "Show Under Menu" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_standard_goal_value +msgid "Show the set target" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_goal_enable +msgid "Show the set target." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_menu_sequence +msgid "" +"Smallest sequence give high priority and Highest sequence give low priority" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_import_dashboard.js:0 +#, python-format +msgid "Some Items can not be imported Need Dashboard Ninja pro " +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_filters.py:0 +#, python-format +msgid "" +"Something went wrong . Possibly it is due to wrong input type for domain" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_sort_by_field +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_sort_by_field +msgid "Sort By Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_sort_by_order +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_sort_by_order +msgid "Sort Order" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_bar_chart_stacked +msgid "Stack the columns of the same record. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_bar_chart_stacked +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Stacked Bar Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_standard_goal_value +msgid "Standard Target" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_start_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_item_start_date +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Start Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py:0 +#, python-format +msgid "Start date must be less than end date" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#, python-format +msgid "Start date should be less than end date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Sub Group By Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#, python-format +msgid "Sub Groupby field: {} cannot be aggregated by {}" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_widget_toggle.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_data_count_type__sum +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type_2__sum +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type__sum +#, python-format +msgid "Sum" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Target" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_goal_lines +msgid "Target Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Task Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Tasks" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__display_type +msgid "Technical field for UX purpose." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_template_type +msgid "Template Format" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_dashboard_item_ids +msgid "Template Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__name +msgid "The item will be represented by this unique name." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_item_theme +msgid "Theme" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_client_action +msgid "This Action will be Performed at the end of Drill Down Action" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__t_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__t_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__t_month +#, python-format +msgid "This Month" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__t_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__t_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__t_quarter +#, python-format +msgid "This Quarter" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__t_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__t_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__t_week +#, python-format +msgid "This Week" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__t_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__t_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__t_year +#, python-format +msgid "This Year" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_records +msgid "" +"This field Enable the click on \n" +" Dashboard Items to view the Odoo \n" +" default view of records" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py:0 +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py:0 +#, python-format +msgid "This file is not supported" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_tile +#, python-format +msgid "Tile" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_format +msgid "To Change the number format showing in chart to given option" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_to_do +#, python-format +msgid "To Do" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_to_do_data +msgid "To Do Data in JSon" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_to_do_preview +msgid "To Do Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "To add dashboard item, use" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_data_limit_visibility +msgid "To enable the record data limit field" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_dashboard_ninja.js:0 +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_day +#, python-format +msgid "Today" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_button_color +msgid "Top Button Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count_type +msgid "" +"Type of record how record will show as count,sum and average of the record" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_list_view_type__ungrouped +msgid "Un-Grouped" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/js/ks_import_dashboard.js:0 +#: code:addons/ks_dashboard_ninja/static/src/js/ks_import_dashboard.js:0 +#, python-format +msgid "Unarchive" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_set_interval +msgid "Update Interval for new items only" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_auto_update_type__ks_live_update +msgid "Update at every instance." +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_widget_toggle.xml:0 +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_icon +#, python-format +msgid "Upload Icon" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#, python-format +msgid "Uploading..." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__ks_goal_value +msgid "Value" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_target_view +msgid "View" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_tree +msgid "View Items" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_item_color__warm +msgid "Warm" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__week +msgid "Week" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__year +msgid "Year" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "Your personal dashboard is empty" +msgstr "" + +#. module: ks_dashboard_ninja +#: code:addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py:0 +#, python-format +msgid "if target lines is selected then cannot be set pagination value" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_target_deviation_field +msgid "list_field_id" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "on top right corner." +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dn_global_filter.xml:0 +#, python-format +msgid "or" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_to_do_description +msgid "to do description" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_to_do_headers +msgid "to do headers" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "vs Prev" +msgstr "" + +#. module: ks_dashboard_ninja +#. openerp-web +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_item_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#: code:addons/ks_dashboard_ninja/static/src/xml/ks_dashboard_ninja_templates.xml:0 +#, python-format +msgid "vs Target" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_export_all_records +msgid "" +"when click on boolean button, all the records will be downloaded which are " +"present in entire list" +msgstr "" diff --git a/third_party_addons/ks_dashboard_ninja/i18n/es_MX.po b/third_party_addons/ks_dashboard_ninja/i18n/es_MX.po new file mode 100644 index 000000000..c0320a97a --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/i18n/es_MX.po @@ -0,0 +1,3518 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ks_dashboard_ninja +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0+e-20250415\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-05-17 16:28+0000\n" +"PO-Revision-Date: 2025-05-19 16:13-0600\n" +"Last-Translator: \n" +"Language-Team: \n" +"Language: es_MX\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" +"X-Generator: Poedit 3.6\n" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_dashboard_board_id +msgid "" +"\n" +" Items Configuration and their position in the dashboard will be copied from the selected dashboard \n" +" and will be saved as template.\n" +" " +msgstr "" +"\n" +" La configuración de los elementos y su posición en el panel se copiarán del panel seleccionado \n" +" y se guardarán como plantilla.\n" +" " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_previous_period +msgid " Compare With Previous Period " +msgstr " Comparación con el periodo previo " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_relation_groupby +msgid " Define the x-axis of the graph. " +msgstr " Define el eje x del gráfico. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_year_period +msgid " Display the record for the same Date field for the last year. " +msgstr " Mostrar el registro del mismo campo Fecha para el último año. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_data_value +msgid " Display value on the graph. . " +msgstr " Mostrar valor en la gráfica. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_pastwithout_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_pastwithout_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_pastwithout_now +msgid " Past Excluding Today" +msgstr " Pasado excluyendo hoy" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_compare_period +msgid " Provide the number of Date Filter Selection you want to include while displaying the record." +msgstr " Proporcione el número de selección de filtro de fecha que desea incluir al mostrar el registro." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_data_limit +msgid " Records to be displayed on the graph" +msgstr " Registros que se mostrarán en el gráfico" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_background_color +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_header_bg_color +msgid " Select the background color with transparency. " +msgstr " Selecciona el color de fondo con transparencia. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_fields +msgid " Select the fields you want to display in the list. " +msgstr " Seleccione los campos que desea mostrar en la lista. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_layout +msgid " Select the layout to display records. " +msgstr " Seleccione el diseño para mostrar los registros. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_sort_by_order +msgid " Select the order of the sorting. " +msgstr " Seleccione el orden de clasificación. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_target_view +msgid " Select the view to compare target with data." +msgstr " Seleccione la vista para comparar el objetivo con los datos." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_relation_sub_groupby +msgid " Sub Group By" +msgstr " Subgrupo por" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__60000 +msgid "1 minute" +msgstr "1 minuto" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__600000 +msgid "10 minute" +msgstr "10 minutos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__res_config_settings__ks_analysis_word_length__100 +msgid "100 words" +msgstr "100 minutos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__15000 +msgid "15 Seconds" +msgstr "15 segundos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__res_config_settings__ks_analysis_word_length__150 +msgid "150 words" +msgstr "150 palabras" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__120000 +msgid "2 minute" +msgstr "2 minutos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__res_config_settings__ks_analysis_word_length__200 +msgid "200 words" +msgstr "200 palabras" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__30000 +msgid "30 Seconds" +msgstr "30 segundos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__45000 +msgid "45 Seconds" +msgstr "45 segundos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__300000 +msgid "5 minute" +msgstr "5 minutos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__res_config_settings__ks_analysis_word_length__50 +msgid "50 words" +msgstr "50 palabras" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "" +"\n" +" **File names should not contain any special characters. File name can have\n" +" Spaces or separated by Underscores(_).\n" +" " +msgstr "" +"\n" +" **Los nombres de archivo no deben contener caracteres especiales. Pueden estar separados \n" +" por espacios o guiones bajos (_).\n" +" " + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "" +"\n" +" **Field in sort by column must match atleast one field given in\n" +" measures column.\n" +" " +msgstr "" +"\n" +" **El campo en la columna \"Ordenar por\" debe coincidir al menos con un campo indicado en \n" +" la columna \"Medidas\".\n" +" " + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "" +"\n" +" ** Please enter positive standard target.\n" +" " +msgstr "" +"\n" +" ** Ingrese un objetivo estándar positivo.\n" +" " + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Preview" +msgstr "Avance" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_ai_analysis +msgid "AI Analysis" +msgstr "Análisis de IA" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_res_config_settings__ks_analysis_word_length +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "AI Analysis length" +msgstr "Longitud del análisis de IA" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_dashboard_ninja_ai_action +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_ai_dashboard +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_arti_int +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "AI Dashboard" +msgstr "Panel de IA" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_dashboard_ninja_ai_dashboardaction +msgid "AI whole Dashboard" +msgstr "Panel de control completo con IA" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__ks_access_id +msgid "Access Id" +msgstr "Acceso ID" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__ks_action +msgid "Action" +msgstr "Acción" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_item_action_field +msgid "Action Group By" +msgstr "Grupo de acción por" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_action_lines +msgid "Action Lines" +msgstr "Líneas de acción" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_action_item_name +msgid "Action item name" +msgstr "Nombre del elemento de acción" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_actions +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Actions" +msgstr "Acciones" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_active +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_is_active +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Active" +msgstr "Activo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__ks_active +msgid "Active Description" +msgstr "Descripción activa" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_create_dashboard_wizard +msgid "Add New Dashboard" +msgstr "Agregar nuevo panel" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Add a Line" +msgstr "Agregar una linea" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Add a Section" +msgstr "Agregar una sección" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Add a filter" +msgstr "Agregar un filtro" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Add a separator" +msgstr "Agregar un separador" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Advance Configuration" +msgstr "Configuración avanzada" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Advance Settings" +msgstr "Ajustes avanzados" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "" +"All Target Lines Changes Will be reflected on Chart after saving the record\n" +" and\n" +" pagination will be ignore ." +msgstr "" +"Todos los cambios en las líneas de destino se reflejarán en el gráfico después de guardar el registro.\n" +" y\n" +" La paginación será ignorada." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_none +msgid "All Time" +msgstr "Todo el tiempo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board__multi_layouts +msgid "Allow user to have multiple layouts of the same Dashboard" +msgstr "Permitir al usuario tener múltiples diseños del mismo Tablero" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_multiplier_active +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Apply Multiplier" +msgstr "Aplicar multiplicador" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_delete_dashboard_wizard_form +msgid "Are you sure you want to delete this dashboard ?" +msgstr "¿Estás seguro que deseas eliminar este panel?" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_area_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_area_chart +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_15 +msgid "Area Chart" +msgstr "Gráfico de área" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_23 +msgid "Area Chart with data values" +msgstr "Gráfico de área con valores de datos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_sort_by_order__asc +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_sort_by_order__asc +msgid "Ascending" +msgstr "Ascenso" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Auto Update" +msgstr "Actualización automática" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_data_count_type__average +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type_2__average +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type__average +msgid "Average" +msgstr "Promedio" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_background_color +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Background Color" +msgstr "Color de fondo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_bar_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_bar_chart +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_5 +msgid "Bar Chart" +msgstr "Gráfico de barras" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_20 +msgid "Bar Chart With Data Values" +msgstr "Gráfico de barras con valores de datos" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Below action will be performed at the end of the Drill Down Action" +msgstr "La siguiente acción se realizará al final de la acción de desglose" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__board_type +msgid "Board Type" +msgstr "Tipo de tablero" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_bullet_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_bullet_chart +msgid "Bullet Chart" +msgstr "Gráfico de viñetas" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_bullet_preview +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Bullet Preview" +msgstr "Gráfico de viñetas" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__data_source__csv +msgid "CSV" +msgstr "CSV" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__csv_bool +msgid "CSV Bool" +msgstr "CSV Bool" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_csv_group_by_lines +msgid "CSV Group By Lines" +msgstr "Agrupar por líneas CSV" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_action +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_delete_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_duplicate_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_fetch_key_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_import_dashboard_form_view +msgid "Cancel" +msgstr "Cancelar" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_item_color +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Chart Color Palette" +msgstr "Paleta de colores del gráfico" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_data +msgid "Chart Data in string form" +msgstr "Datos del gráfico en formato de cadena" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_previous_period +msgid "Checkbox to show comparison between the data of present day and the previous selected period. " +msgstr "Casilla de verificación para mostrar la comparación entre los datos del día actual y el período anterior seleccionado. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_child_board__board_type__child +msgid "Child" +msgstr "Niño" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_icon_select +msgid "Choose the Icon option. " +msgstr "Elija la opción Icono. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_is_client_action +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Client Action" +msgstr "Atención al cliente" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Client Action Item" +msgstr "Elemento de acción del cliente" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_client_action +msgid "Client Item Action" +msgstr "Acción del elemento del cliente" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_format__colombian +msgid "Colombian Peso Format" +msgstr "Formato del peso colombiano" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Column Data Type" +msgstr "Tipo de datos de columna" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__company_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_company_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.child_board_tree +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Company" +msgstr "Compañia" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Compare With Previous Period" +msgstr "Comparar con el período anterior" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_res_config_settings +msgid "Config Settings" +msgstr "Ajustes de configuración" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.configuration_menu +msgid "Configuration" +msgstr "Configuración" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_data_count_type__count +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type_2__count +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type__count +msgid "Count" +msgstr "Cuenta" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Count..." +msgstr "Cuenta..." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_country_id +msgid "Country" +msgstr "País" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_country_code +msgid "Country Code" +msgstr "Código del país" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Create Table" +msgstr "Crear tabla" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_delete_wizard__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__create_uid +msgid "Created by" +msgstr "Creado por" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_delete_wizard__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__create_date +msgid "Created on" +msgstr "Creado en" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_cumulative +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Cumulative As Line" +msgstr "Línea acumulativa como" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_cumulative_field +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Cumulative Fields" +msgstr "Campos acumulativos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_currency_id +msgid "Currency" +msgstr "Divisa" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board_template__ks_template_type__ks_custom +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_icon_select__custom +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_unit_selection__custom +msgid "Custom" +msgstr "Personalizado" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_custom +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_custom +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_custom +msgid "Custom Filter" +msgstr "Filtro personalizado" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Custom Filters" +msgstr "Filtros personalizados" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_calculation_type__query +msgid "Custom Query" +msgstr "Consulta personalizada" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_item_color__dark +msgid "Dark" +msgstr "Oscuro" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__ks_dashboard_board_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_dashboard_board_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_dashboard_board_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__ks_dashboard_board_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_ninja_board_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.child_board_tree +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item +msgid "Dashboard" +msgstr "Panel" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_res_config_settings__dn_api_key +msgid "Dashboard AI API Key" +msgstr "Clave API de IA del panel de control" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Dashboard API Key" +msgstr "Clave API del panel de control" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Dashboard Charts Configurations" +msgstr "Configuraciones de gráficos del tablero" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_wizard +msgid "Dashboard Creation Wizard" +msgstr "Asistente para la creación de paneles" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_custom_filters_ids +msgid "Dashboard Custom Filters" +msgstr "Filtros personalizados del panel de control" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +msgid "Dashboard Defined Filter" +msgstr "Filtro definido por el panel" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_delete_wizard +msgid "Dashboard Delete Wizard" +msgstr "Asistente para eliminar el panel de control" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_duplicate_wizard +msgid "Dashboard Duplicate Wizard" +msgstr "Asistente para duplicar el panel de control" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_favourite_filters_ids +msgid "Dashboard Favourite Filters" +msgstr "Filtros favoritos del panel de control" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dn_dashboard_image +msgid "Dashboard Image" +msgstr "Imagen del tablero" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__ks_dashboard_csv_group_by_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__ks_dashboard_item_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_dashboard_item_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__ks_dashboard_item +msgid "Dashboard Item" +msgstr "Elemento del tablero" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_action +msgid "Dashboard Item Action" +msgstr "Acción del elemento del tablero" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_date_groupby +msgid "Dashboard Item Chart Group By Type" +msgstr "Grupo de gráficos de elementos del tablero por tipo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_date_sub_groupby +msgid "Dashboard Item Chart Sub Group By Type" +msgstr "Subgrupo de gráficos de elementos del tablero por tipo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__ks_dashboard_group_by_id +msgid "Dashboard Item Id" +msgstr "Id. del elemento del panel" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_item_type +msgid "Dashboard Item Type" +msgstr "Tipo de elemento del tablero" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.item_action_window +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_items_ids +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__ks_dashboard_item_ids +msgid "Dashboard Items" +msgstr "Elementos del tablero" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.child_board_tree +msgid "Dashboard Layout" +msgstr "Diseño del tablero de instrumentos" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.dashboard_layout_menu +msgid "Dashboard Layouts" +msgstr "Diseños del tablero de instrumentos" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.board_form_tree_action_window +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_delete_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_duplicate_dashboard_wizard_form +msgid "Dashboard Manager" +msgstr "Administrador del panel de control" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__ks_dash_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__name +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Dashboard Name" +msgstr "Nombre del tablero" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_board +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Dashboard Ninja" +msgstr "Tablero ninja" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Dashboard Ninja Api Key" +msgstr "Clave API de Dashboard Ninja" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_child_board +msgid "Dashboard Ninja Child Board" +msgstr "Tablero infantil Ninja Dashboard" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_board_custom_filters +msgid "Dashboard Ninja Custom Filters" +msgstr "Filtros personalizados de Dashboard Ninja" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_board_defined_filters +msgid "Dashboard Ninja Defined Filters" +msgstr "Filtros definidos por Dashboard Ninja" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_favourite_filters +msgid "Dashboard Ninja Favourite Filters" +msgstr "Filtros favoritos de Dashboard Ninja" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_csv_group_by +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_group_by +msgid "Dashboard Ninja Group By" +msgstr "Panel de control Ninja Group By" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_ninja_dashboard_item_action +msgid "Dashboard Ninja Item Actions" +msgstr "Acciones de elementos Ninja del panel de control" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_item_action +msgid "Dashboard Ninja Items Action Lines" +msgstr "Líneas de acción de elementos Ninja del tablero de instrumentos" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_item_goal +msgid "Dashboard Ninja Items Goal Lines" +msgstr "Líneas de gol de elementos Ninja del tablero de instrumentos" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_item_multiplier +msgid "Dashboard Ninja Items Multiplier Lines" +msgstr "Líneas multiplicadoras de elementos Ninja del tablero" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_kpi_mail +msgid "Dashboard Ninja Kpi mail" +msgstr "Correo de KPI de Dashboard Ninja" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_csv_new +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_new +msgid "Dashboard Ninja New" +msgstr "Tablero Ninja Nuevo" + +#. module: ks_dashboard_ninja +#: model:ir.module.category,name:ks_dashboard_ninja.ks_dashboard_ninja_security_groups +msgid "Dashboard Ninja Rights" +msgstr "Derechos de Dashboard Ninja" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_board_template +msgid "Dashboard Ninja Template" +msgstr "Plantilla Ninja del Tablero" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_item +msgid "Dashboard Ninja items" +msgstr "Elementos Ninja del panel de control" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_defined_filters_ids +msgid "Dashboard Predefined Filters" +msgstr "Filtros predefinidos del panel de control" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.template_tree_action_window +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__ks_template +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_default_template +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_board_template_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__ks_template +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_template_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_template_tree +msgid "Dashboard Template" +msgstr "Plantilla de panel de control" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.layout_tree_action_window +msgid "Dashboard layout" +msgstr "Diseño del tablero de instrumentos" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.dashboard_menu +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Dashboards" +msgstr "Paneles de control" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data" +msgstr "Datos" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data #2" +msgstr "Datos #2" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data Calculation" +msgstr "Calculo de datos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_calculation_type +msgid "Data Calculation Type" +msgstr "Tipo de cálculo de datos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_kpi_type__layout_2 +msgid "Data Comparison" +msgstr "Data Comparison" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_measure_field_2 +msgid "Data Points displayed with a line in the graph. " +msgstr "Puntos de datos mostrados con una línea en el gráfico. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__data_source +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data Source" +msgstr "Fuente de datos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_as_of_now +msgid "Data Till Now" +msgstr "Datos hasta ahora" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_data_count_type +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data Type" +msgstr "Tipo de datos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_cumulative_field +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_measure_field +msgid "Data points to be selected." +msgstr "Puntos de datos a seleccionar." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__ks_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__ks_import_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_import_model +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_import_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__ks_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_model_id +msgid "Data source to fetch and read the data for the creation of dashboard items. " +msgstr "Fuente de datos para obtener y leer los datos para la creación de elementos del panel. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__ks_goal_date +msgid "Date" +msgstr "Datos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_field +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Date Filter Field" +msgstr "Campo de filtro de fecha" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_selection +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Date Filter Selection" +msgstr "Selección de filtro de fecha" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__day +msgid "Day" +msgstr "Dia" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_child_board__board_type__default +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_item_color__default +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_icon_select__default +msgid "Default" +msgstr "Por defecto" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "" +"Default Date\n" +" Filter" +msgstr "" +"Fecha por defecto\n" +" Filtro" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_date_filter_selection +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Default Date Filter" +msgstr "Filtro de fecha predeterminado" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_default_end_time +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Default End Time" +msgstr "Hora de finalización predeterminada" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_calculation_type__custom +msgid "Default Query" +msgstr "Consulta predeterminada" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_set_interval +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Default Update Interval" +msgstr "Intervalo de actualización predeterminado" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_extension +msgid "Define conditions for filter to write manually" +msgstr "Definir condiciones para que el filtro se escriba manualmente" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_domain +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain +msgid "Define conditions for filter. " +msgstr "Definir condiciones para el filtro. " + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_delete_dashboard_wizard_form +msgid "Delete" +msgstr "Borrar" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_delete_dashboard_wizard +msgid "Delete Dashboard" +msgstr "Borrar tablero" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_sort_by_order__desc +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_sort_by_order__desc +msgid "Descending" +msgstr "Decendiendo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__ks_description +msgid "Description" +msgstr "Descripcion" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Deviation Field" +msgstr "Campo de desviación" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_precision_digits +msgid "Digits" +msgstr "Dígitos" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_discuss_channel +msgid "Discussion Channel" +msgstr "Canal de conversaciones" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Display" +msgstr "Mostrar" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_delete_wizard__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__display_name +msgid "Display Name" +msgstr "Mostrar nombre" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__display_type +msgid "Display Type" +msgstr "Mostrar tipo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_as_of_now +msgid "Display the total sum of each legends as it grows with times" +msgstr "Muestra la suma total de cada leyenda a medida que crece con el tiempo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_unit +msgid "Display the unit of the data." +msgstr "Mostrar la unidad de los datos." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_domain +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Domain" +msgstr "Dominio" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_extension +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Domain Extension" +msgstr "Expansión de dominio" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__ks_domain_field_id +msgid "Domain Field" +msgstr "Campo de dominio" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_domain_temp +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_temp +msgid "Domain Substitute" +msgstr "Sustituto de dominio" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_doughnut_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_doughnut_chart +msgid "Doughnut Chart" +msgstr "Gráfico de anillos" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_11 +msgid "Doughnut chart" +msgstr "Gráfico de anillos" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_25 +msgid "Doughnut semi circle" +msgstr "Semicírculo de dona" + +#. module: ks_dashboard_ninja +#: model:ir.actions.server,name:ks_dashboard_ninja.ks_duplicate_dashboard +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_ninja_dashboard_item_action__ks_action__duplicate +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_duplicate_dashboard_wizard_form +msgid "Duplicate" +msgstr "Duplicado" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_duplicate_dashboard_wizard +msgid "Duplicate Dashboard" +msgstr "Tablero duplicado" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_duplicate_dashboard_wizard_form +msgid "Duplicate Image" +msgstr "Duplicado de imagen" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_email_to_ids +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Email Address" +msgstr "Dirección de correo electrónico" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__ks_email_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_res_config_settings__ks_email_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Email ID" +msgstr "ID de correo electrónico" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__name +msgid "Email To:" +msgstr "Enviar correo electrónico a:" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__multi_layouts +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Enable Multi-Dashboard Layouts" +msgstr "Habilitar diseños de múltiples paneles" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_goal_enable +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enable Target" +msgstr "Habilitar objetivo" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Enable Zooming" +msgstr "Habilitar zoom" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_res_config_settings__enable_chart_zoom +msgid "Enable Zooming for charts" +msgstr "Habilitar el zoom para gráficos" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Enable Zooming for charts on mouse scroll" +msgstr "Habilitar el zoom para gráficos al desplazarse con el mouse" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_end_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_item_end_date +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "End Date" +msgstr "Fecha de finalización" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_format__global +msgid "English Format" +msgstr "Formato ingles" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Enter Dashboard Name" +msgstr "Ingrese el nombre del tablero" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Data Calculation" +msgstr "Cálculo de introducción de datos" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Data Type" +msgstr "Introduzca el tipo de datos" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Date Filter" +msgstr "Introducir filtro de fecha" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Default Date Filter" +msgstr "Introduzca el filtro de fecha predeterminado" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Deviation Field" +msgstr "Introduzca el campo de desviación" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Domain" +msgstr "Ingresar dominio" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Email Address" +msgstr "Introduzca su dirección de correo electrónico" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter End Date" +msgstr "Introduzca la fecha de finalización" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Fields to show in list" +msgstr "Introduzca los campos que desea mostrar en la lista" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +msgid "Enter Filter Name" +msgstr "Introduzca el nombre del filtro" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Icon Option" +msgstr "Entrar Opción de icono" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Item Description" +msgstr "Introduzca la descripción del artículo" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Layout" +msgstr "Introducir diseño" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Line Measure" +msgstr "Introducir medida de línea" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter List View Grouped Fields" +msgstr "Ingresar a la vista de lista de campos agrupados" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter List View Type" +msgstr "Introduzca el tipo de vista de lista" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Measure" +msgstr "Introducir medida" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Measure X" +msgstr "Ingrese la Medida X" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Measures" +msgstr "Introducir medidas" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Enter Menu Name" +msgstr "Introducir nombre del menú" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Enter Menu Sequence" +msgstr "Entrar en la secuencia del menú" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Enter Model" +msgstr "Introducir modelo" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Model Name" +msgstr "Ingrese el nombre del modelo" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Multiplier" +msgstr "Introducir multiplicador" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Name" +msgstr "Introducir nombre" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Pagination Limit" +msgstr "Introducir límite de paginación" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Record Field" +msgstr "Ingresar campo de registro" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Record Limit" +msgstr "Introducir límite de registros" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Record Type" +msgstr "Ingrese el tipo de registro" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Record Value" +msgstr "Ingrese el valor del registro" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Scatter Group By" +msgstr "Ingrese al grupo disperso por" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +msgid "Enter Separator Name (eg. Order States, Deadlines)" +msgstr "Introduzca el nombre del separador (por ejemplo, estados del pedido, fechas límite)" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Enter Sequence" +msgstr "Introducir secuencia" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Standard Target" +msgstr "Introduzca el objetivo estándar" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Start Date" +msgstr "Introduzca la fecha de inicio" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_unit +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Unit" +msgstr "Ingresar unidad" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_data_formatting__exact +msgid "Exact" +msgstr "Exacto" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_format__exact +msgid "Exact Value" +msgstr "Valuación exacta" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__data_source__excel +msgid "Excel" +msgstr "Sobresalir" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__excel_bool +msgid "Excel Bool" +msgstr "Excel Bool" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_export_all_records +msgid "Export All Records" +msgstr "Exportar todos los registros" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_fetch_key +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_fetch_key +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_fetch_key_form_view +msgid "Fetch API key" +msgstr "Obtener clave API" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_fetch_key_form_view +msgid "Fetch Key" +msgstr "Obtener clave" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_fields +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Fields to show in list" +msgstr "Campos a mostrar en la lista" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__filename +msgid "Filename" +msgstr "Nombre del archivo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_fill_temporal +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Fill Temporal Value" +msgstr "Rellenar valor temporal" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__ks_filter +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Filter" +msgstr "Filtro" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__name +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +msgid "Filter Label" +msgstr "Etiqueta de filtro" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_flower_view_preview +msgid "Flower Preview" +msgstr "Vista previa de la flor" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_flower_view +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_flower_view +msgid "Flower View" +msgstr "Vista de flores" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_font_color +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Font Color" +msgstr "Color de fuente" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_data_formatting +msgid "Format" +msgstr "Formato" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_funnel_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_funnel_chart +msgid "Funnel Chart" +msgstr "Gráfico de embudo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_funnel_preview +msgid "Funnel Preview" +msgstr "Vista previa del embudo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_funnel_record_field +msgid "Funnel Record Field" +msgstr "Campo de registro de embudo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_future_starting_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_future_starting_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_future_starting_now +msgid "Future Starting Now" +msgstr "El futuro empieza ahora" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_futurestarting_tomorrow +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_futurestarting_tomorrow +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_futurestarting_tomorrow +msgid "Future Starting Tomorrow" +msgstr "El futuro empieza mañana" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Generate Item" +msgstr "Generar artículo" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +msgid "Generate dashboard with AI" +msgstr "Generar panel de control con IA" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Generate with" +msgstr "Generar con" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Generate with AI" +msgstr "Generar con IA" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__ks_api_key +msgid "Generated AI API Key" +msgstr "Clave API de IA generada" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Get API key" +msgstr "Obtener la clave API" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__sequence +msgid "Gives the sequence order when displaying a list of payment terms lines." +msgstr "Proporciona el orden de secuencia al mostrar una lista de líneas de condiciones de pago." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_data_formatting__global +msgid "Global" +msgstr "Global" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Goal Lines" +msgstr "Líneas de gol" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_graph_preview +msgid "Graph Preview" +msgstr "Vista previa del gráfico" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_group_access +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Group Access" +msgstr "Acceso grupal" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.action_group_by +#: model:ir.actions.act_window,name:ks_dashboard_ninja.csv_action_group_by +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_relation_groupby +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Group By" +msgstr "Agrupar por" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_item_action_date_groupby +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Group By Date" +msgstr "Agrupar por fecha" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_group_by_lines +msgid "Group By Lines" +msgstr "Agrupar por líneas" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_list_view_type__grouped +msgid "Grouped" +msgstr "Agrupado" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Groups/Dimensions" +msgstr "Grupos/Dimensiones" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__ks_to_do_header +msgid "Header" +msgstr "Encabezamiento" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_header_bg_color +msgid "Header Background Color" +msgstr "Color de fondo del encabezado" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_hide_legend +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_radial_legend +msgid "Hide all legend from the chart item" +msgstr "Ocultar toda la leyenda del elemento del gráfico" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_9 +msgid "Horizontal Bar" +msgstr "Barra fija" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_horizontalbar_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_horizontalbar_chart +msgid "Horizontal Bar Chart" +msgstr "Gráfico de barras horizontales" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_22 +msgid "Horizontal Bar(sub-group)" +msgstr "Barra horizontal (subgrupo)" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__hour +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__hour +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__hour +msgid "Hour" +msgstr "Hora" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_delete_wizard__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__id +msgid "ID" +msgstr "ID" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_default_icon +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Icon" +msgstr "Icono" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_default_icon_color +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Icon Color" +msgstr "Icono de color" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_icon_select +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Icon Option" +msgstr "Opción de icono" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_import_dashboard_action +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_import +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_import_dashboard_form_view +msgid "Import Dashboard" +msgstr "Panel de importación" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.ks_import_dashboard_menu +msgid "Import Dashboards" +msgstr "Importar paneles de control" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.inbox_menu +msgid "Inbox" +msgstr "Bandeja de entrada" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_compare_period +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Include Period" +msgstr "Incluir período" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_data_formatting__indian +msgid "Indian" +msgstr "India" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_format__indian +msgid "Indian Format" +msgstr "Formato indio" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__is_bookmarked +msgid "Is Bookmarked" +msgstr "Está marcado" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_is_cumulative +msgid "Is Cumulative" +msgstr "Es acumulativo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_active +msgid "Is Selected" +msgstr "Está seleccionado" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Item Action" +msgstr "Acción del artículo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_gridstack_config +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_gridstack_config +msgid "Item Configurations" +msgstr "Configuraciones de artículos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_info +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Item Description" +msgstr "Descripción del artículo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_chart_type +msgid "Item Type" +msgstr "Tipo de artículo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_kpi +msgid "KPI" +msgstr "KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_kpi_data +msgid "KPI Data" +msgstr "Datos KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_extension_2 +msgid "KPI Domain Extension" +msgstr "Extensión de dominio KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_compare_period_2 +msgid "KPI Include Period" +msgstr "Período de inclusión de KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count_2 +msgid "KPI Record Count" +msgstr "Recuento de registros de KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_year_period_2 +msgid "KPI Same Period Previous Years" +msgstr "KPI mismo período años anteriores" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_kpi_type__layout_1 +msgid "KPI With Target" +msgstr "KPI con objetivo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_arti_int__ks_type__ks_keyword +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Keywords" +msgstr "Contraseñas" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_18 +msgid "Kpi ( Number)" +msgstr "Kpi (Número)" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_17 +msgid "Kpi ( Percentage)" +msgstr "Kpi (Porcentaje)" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_27 +msgid "Kpi (previous)" +msgstr "Kpi (anterior)" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_19 +msgid "Kpi (sum)" +msgstr "Kpi (suma)" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_26 +msgid "Kpi 26(Average)" +msgstr "Kpi 26 (promedio)" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_comparison +msgid "Kpi Data Type" +msgstr "Tipo de datos de KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_field_2 +msgid "Kpi Date Filter Field" +msgstr "Campo de filtro de fecha de KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_selection_2 +msgid "Kpi Date Filter Selection" +msgstr "Selección de filtro de fecha de KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_2 +msgid "Kpi Domain" +msgstr "Kpi Domain" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_2_temp +msgid "Kpi Domain Substitute" +msgstr "Sustituto de dominio de KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_item_end_date_2 +msgid "Kpi End Date" +msgstr "Fecha de finalización del KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_kpi_type +msgid "Kpi Layout" +msgstr "Diseño de KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_id_2 +msgid "Kpi Model" +msgstr "Modelo de KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_name_2 +msgid "Kpi Model Name" +msgstr "Nombre del modelo KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_kpi_preview +msgid "Kpi Preview" +msgstr "Vista previa de KPI" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_16 +msgid "Kpi Ratio" +msgstr "Índice de KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_field_2 +msgid "Kpi Record Field" +msgstr "Campo de registro de KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count_type_2 +msgid "Kpi Record Type" +msgstr "Tipo de registro de KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_item_start_date_2 +msgid "Kpi Start Date" +msgstr "Fecha de inicio del KPI" + +#. module: ks_dashboard_ninja +#: model:ir.actions.server,name:ks_dashboard_ninja.ir_cron_send_target_email_ir_actions_server +msgid "Kpi mail cron" +msgstr "Cron de correo de KPI" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_type +msgid "Ks AI Type" +msgstr "Tipo de IA de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_ai_explain_dash +msgid "Ks Ai Explain Dash" +msgstr "Ks Ai Explica Dash" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_bounds +msgid "Ks Bounds" +msgstr "Límites de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_groupby_type +msgid "Ks Chart Groupby Type" +msgstr "Gráfico Ks Agrupar por tipo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_sub_groupby_type +msgid "Ks Chart Sub Groupby Type" +msgstr "Subgrupo por tipo de gráfico Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_child_dashboard_ids +msgid "Ks Child Dashboard" +msgstr "Panel de control infantil de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_computed_group_access +msgid "Ks Computed Group Access" +msgstr "Acceso al grupo computarizado de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_discuss_channel__ks_dashboard_board_id +msgid "Ks Dashboard Board" +msgstr "Tablero de instrumentos de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_client_action_id +msgid "Ks Dashboard Client Action" +msgstr "Acción del cliente del panel de control de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_discuss_channel__ks_dashboard_item_id +msgid "Ks Dashboard Item" +msgstr "Elemento del panel de control de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_menu_id +msgid "Ks Dashboard Menu" +msgstr "Menú del tablero de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_state +msgid "Ks Dashboard State" +msgstr "Estado del tablero de instrumentos de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_db_name +msgid "Ks Db Name" +msgstr "Nombre de la base de datos Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_db_password +msgid "Ks Db Password" +msgstr "Contraseña de Ks Db" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_db_user +msgid "Ks Db User" +msgstr "Usuario de Ks Db" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dn_header_lines +msgid "Ks Dn Header Lines" +msgstr "Líneas de encabezado Ks Dn" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__ks_dn_item_id +msgid "Ks Dn Item" +msgstr "Artículo Ks Dn" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__ks_filter_type +msgid "Ks Filter Type" +msgstr "Tipo de filtro Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_gridstack_config +msgid "Ks Gridstack Config" +msgstr "Configuración de Ks Gridstack" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_host +msgid "Ks Host" +msgstr "Anfitrión de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_is_external_db +msgid "Ks Is External Db" +msgstr "Ks es una base de datos externa" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_isDateFilterApplied +msgid "Ks Isdatefilterapplied" +msgstr "Ks Se aplicó el filtro de fecha" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_item_action_field_type +msgid "Ks Item Action Field Type" +msgstr "Tipo de campo de acción del elemento Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_item_count +msgid "Ks Item Count" +msgstr "Recuento de artículos de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_input_keywords +msgid "Ks Keywords" +msgstr "Palabras clave de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_many2many_field_ordering +msgid "Ks Many2Many Field Ordering" +msgstr "Ordenamiento de campos Many2Many de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_model_show +msgid "Ks Model Show" +msgstr "Exposición de modelos Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_partners_map +msgid "Ks Partners Map" +msgstr "Mapa de socios de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_port +msgid "Ks Port" +msgstr "Puerto ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__ks_to_do_description_lines +msgid "Ks To Do Description Lines" +msgstr "Líneas de descripción de tareas pendientes de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__ks_to_do_header_id +msgid "Ks To Do Header" +msgstr "Encabezado de tareas pendientes de Ks" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_month +msgid "Last 30 days" +msgstr "Ultimas 30 días" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_year +msgid "Last 365 days" +msgstr "Ultimas 365 días" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_week +msgid "Last 7 days" +msgstr "Ultimas 7 días" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_quarter +msgid "Last 90 days" +msgstr "Ultimas 90 días" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_day +msgid "Last Day" +msgstr "Ultimo día" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_month +msgid "Last Month" +msgstr "Ultimo mes" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_quarter +msgid "Last Quarter" +msgstr "Último trimestre" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_delete_wizard__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__write_uid +msgid "Last Updated by" +msgstr "Última actualización por" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_delete_wizard__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__write_date +msgid "Last Updated on" +msgstr "Última actualización el" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_week +msgid "Last Week" +msgstr "La semana pasada" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_year +msgid "Last Year" +msgstr "El año pasado" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_layout +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Layout" +msgstr "Disposición" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout1 +msgid "Layout 1" +msgstr "Disposición 1" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout2 +msgid "Layout 2" +msgstr "Disposición 2" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout3 +msgid "Layout 3" +msgstr "Disposición 3" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout4 +msgid "Layout 4" +msgstr "Disposición 4" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout5 +msgid "Layout 5" +msgstr "Disposición 5" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout6 +msgid "Layout 6" +msgstr "Disposición 6" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Layout..." +msgstr "Disposición..." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_line_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_line_chart +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_6 +msgid "Line Chart" +msgstr "Gráfico de líneas" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_24 +msgid "Line Chart with values" +msgstr "Gráfico de líneas con valores" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_measure_field_2 +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Line Measure" +msgstr "Medida de línea" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_list_view +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_list_view +msgid "List View" +msgstr "Vista de lista" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_data +msgid "List View Data in JSon" +msgstr "Datos de vista de lista en JSon" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_group_fields +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "List View Grouped Fields" +msgstr "Campos agrupados de la vista de lista" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_preview +msgid "List View Preview" +msgstr "Vista previa de la vista de lista" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_type +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "List View Type" +msgstr "Tipo de vista de lista" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_map_chart_relation_groupby +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Map Group By" +msgstr "Agrupar mapas por" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_map_preview +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Map Preview" +msgstr "Vista previa del mapa" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_map_record_field +msgid "Map Record Field" +msgstr "Campo de registro de mapa" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_map_view +msgid "Map View" +msgstr "Vista del mapa" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_item_color__material +msgid "Material" +msgstr "Material" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_unit +msgid "Maximum limit 5 characters, for ex: km, m" +msgstr "Límite máximo de 5 caracteres, por ejemplo: km, m" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Measure" +msgstr "Medida" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_measure_field +msgid "Measure 1" +msgstr "Medida 1" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_scatter_measure_x_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Measure X" +msgstr "Medida X" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_scatter_measure_y_id +msgid "Measure Y" +msgstr "Medida Y" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Measures" +msgstr "Medidas" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__ks_menu_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_menu_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_dashboard_menu_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__ks_menu_name +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Menu Name" +msgstr "Nombre del menú" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_menu_sequence +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Menu Sequence" +msgstr "Secuencia de menú" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__minute +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__minute +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__minute +msgid "Minute" +msgstr "Minuto" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__ks_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__ks_import_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_import_model +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__ks_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_model_id +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_arti_int__ks_type__ks_model +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Model" +msgstr "Modelo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__model_bool +msgid "Model Bool" +msgstr "Modelo Bool" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_import_model_id +msgid "Model ID" +msgstr "Identificación del modelo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_model_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_name +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Model Name" +msgstr "Nombre del modelo" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Model..." +msgstr "Modelo..." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_unit_selection__monetary +msgid "Monetary" +msgstr "Monetario" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__month +msgid "Month" +msgstr "Mes" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__td_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__td_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__td_month +msgid "Month to Date" +msgstr "Mes hasta la fecha" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__month_year +msgid "Month-Year" +msgstr "Mes-Año" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_item_color__moonrise +msgid "Moonrise" +msgstr "Salida de la luna" + +#. module: ks_dashboard_ninja +#: model:ir.actions.server,name:ks_dashboard_ninja.ks_move_dashboard +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_ninja_dashboard_item_action__ks_action__move +msgid "Move" +msgstr "Mover" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__ks_multiplier_value +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_multiplier +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Multiplier" +msgstr "Multiplicador" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__ks_multiplier_fields +msgid "Multiplier Field" +msgstr "Campo multiplicador" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_multiplier_lines +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Multiplier Lines" +msgstr "Líneas multiplicadoras" + +#. module: ks_dashboard_ninja +#: model:ir.actions.client,name:ks_dashboard_ninja.dashboard_action_window +#: model:ir.ui.menu,name:ks_dashboard_ninja.board_menu_root +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_tree +msgid "My Dashboard" +msgstr "Mi panel de control" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.dashboards_menu_root +msgid "My Dashboards" +msgstr "Mis paneles de control" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__name +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Name" +msgstr "Nombre" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__name_seq +msgid "Name Seq" +msgstr "Secuencia de nombre" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_company_id +msgid "Name of the company for which analytics will be displayed in the dashboard. " +msgstr "Nombre de la empresa cuyos análisis se mostrarán en el panel. " + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Name..." +msgstr "Nombre..." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_day +msgid "Next Day" +msgstr "Siguiente día" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_month +msgid "Next Month" +msgstr "Siguiente mes" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_quarter +msgid "Next Quarter" +msgstr "Siguiente trimestre" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_week +msgid "Next Week" +msgstr "Siguiente semana" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_year +msgid "Next Year" +msgstr "Siguiente año" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_comparison__none +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_none +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_none +msgid "None" +msgstr "Ninguno" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_target_view__number +msgid "Number" +msgstr "Numero" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_format +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Number System" +msgstr "Sistema numérico" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__data_source__odoo +msgid "Odoo" +msgstr "Odoo" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.overview_menu +msgid "Overview" +msgstr "Descripción general" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_pagination_limit +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Pagination Limit" +msgstr "Límite de paginación" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_past_until_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_past_until_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_past_until_now +msgid "Past Till Now" +msgstr "Pasado hasta ahora" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_label_type__percent +msgid "Percent" +msgstr "Por ciento" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_comparison__percentage +msgid "Percentage" +msgstr "Porcentaje" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_pie_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_pie_chart +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_14 +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_7 +msgid "Pie Chart" +msgstr "Gráfico circular" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_10 +msgid "Polar Area" +msgstr "Área polar" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_polararea_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_polararea_chart +msgid "Polar Area Chart" +msgstr "Gráfico de área polar" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Pre Defined Filters" +msgstr "Filtros predefinidos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board_template__ks_template_type__ks_default +msgid "Predefined" +msgstr "Predefinido" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_preview +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Preview" +msgstr "Avance" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_target_view__progress_bar +msgid "Progress Bar" +msgstr "Barra de progreso" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_multiplier +msgid "Provides the multiplication of record value" +msgstr "Proporciona la multiplicación del valor del registro" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_multiplier_active +msgid "Provides the visibility of multiplier field" +msgstr "Proporciona la visibilidad del campo multiplicador" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__quarter +msgid "Quarter" +msgstr "Cuarto" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__td_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__td_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__td_quarter +msgid "Quarter to Date" +msgstr "Trimestre hasta la fecha" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.quick_access_menu +msgid "Quick Access" +msgstr "Acceso rápido" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_radar_view +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_radar_view +msgid "Radar View" +msgstr "Vista de radar" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_radialbar_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_radialbar_chart +msgid "Radial Bar Chart" +msgstr "Gráfico de barras radiales" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_radial_preview +msgid "Radial Preview" +msgstr "Vista previa radial" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_comparison__ratio +msgid "Ratio" +msgstr "Relación" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count +msgid "Record Count" +msgstr "Recuento de registros" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_field +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Record Field" +msgstr "Campo de registro" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Record Field..." +msgstr "Campo de registro..." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_data_limit +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_record_limit +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Record Limit" +msgstr "Límite de registro" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_data_limit_visibility +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Record Limit Data Visibility" +msgstr "Visibilidad de datos del límite de registro" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count_type +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Record Type" +msgstr "Tipo de registro" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Record Value" +msgstr "Valor récord" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_actions +msgid "Redirects you to the selected view. " +msgstr "Le redirecciona a la vista seleccionada. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_year_period +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Same Period Previous Years" +msgstr "Mismo Periodo Años Anteriores" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_action +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_import_dashboard_form_view +msgid "Save" +msgstr "Ahorrar" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_scatter_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_scatter_chart +msgid "Scatter Chart" +msgstr "Gráfico de dispersión" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_is_scatter_group +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Scatter Group By" +msgstr "Grupo disperso por" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_scatter_field_id +msgid "Scatter Points" +msgstr "Puntos de dispersión" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_item_search_view +msgid "Search Items" +msgstr "Buscar elementos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board_defined_filters__display_type__line_section +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Section" +msgstr "Sección" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Background Color" +msgstr "Seleccionar color de fondo" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Client Action" +msgstr "Seleccionar acción del cliente" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Company" +msgstr "Seleccionar empresa" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_dashboard_ninja_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__ks_dashboard_ninja_id +msgid "Select Dashboard" +msgstr "Seleccionar Panel de Control" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__ks_dashboard_ninja_ids +msgid "Select Dashboards" +msgstr "Seleccionar paneles" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Select End Date" +msgstr "Seleccionar fecha de finalización" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Font Color" +msgstr "Seleccionar color de fuente" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Group By" +msgstr "Seleccionar Agrupar por" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Group By Date" +msgstr "Seleccionar Agrupar por fecha" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Icon" +msgstr "Seleccionar icono" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Icon Color" +msgstr "Seleccionar el color del icono" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Item Action" +msgstr "Seleccionar acción del elemento" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Map Group By" +msgstr "Seleccionar grupo de mapas por" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Select Model" +msgstr "Seleccionar modelo" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Select Multiple Group Access" +msgstr "Seleccionar acceso a varios grupos" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_duplicate_dashboard_wizard_form +msgid "Select Show Under Menu" +msgstr "Seleccione Mostrar en el menú" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Sort By Field" +msgstr "Seleccionar Ordenar por campo" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Sort Order" +msgstr "Seleccionar orden de clasificación" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Select Start Date" +msgstr "Seleccionar fecha de inicio" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Sub Group By" +msgstr "Seleccionar subgrupo por" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Sub Group By Date" +msgstr "Seleccionar subgrupo por fecha" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Select Template" +msgstr "Seleccionar plantilla" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Theme" +msgstr "Seleccionar tema" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Top Button Color" +msgstr "Seleccionar el color del botón superior" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Select Under Menu" +msgstr "Seleccionar en el menú" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_unit_selection +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Unit Type" +msgstr "Seleccionar el tipo de unidad" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select View" +msgstr "Seleccionar vista" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_selection +msgid "Select interval of the records to be displayed. " +msgstr "Seleccione el intervalo de los registros que se mostrarán. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_item_theme +msgid "Select the color theme for the display. " +msgstr "Seleccione el tema de color para la pantalla. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_type +msgid "Select the desired list view type. " +msgstr "Seleccione el tipo de vista de lista deseada. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_sort_by_field +msgid "Select the desired sorting preference. " +msgstr "Seleccione la preferencia de clasificación deseada. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_item_color +msgid "Select the display preference. " +msgstr "Seleccione la preferencia de visualización. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_field +msgid "Select the field for which Date Filter should be applicable." +msgstr "Seleccione el campo para el cual se debe aplicar el filtro de fecha." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_font_color +msgid "Select the font color. " +msgstr "Seleccione el color de fuente. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_default_icon +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_default_icon_color +msgid "Select the icon to be displayed. " +msgstr "Seleccione el icono que desea mostrar. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_item_type +msgid "Select the required type of dashboard to display. " +msgstr "Seleccione el tipo de panel que desea mostrar. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_relation_sub_groupby +msgid "Select the second level of grouping. " +msgstr "Seleccione el segundo nivel de agrupación. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_calculation_type +msgid "Select the type of calculation you want to perform on the data." +msgstr "Seleccione el tipo de cálculo que desea realizar sobre los datos." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_unit_selection +msgid "Select the unit to be assigned to the value. " +msgstr "Seleccione la unidad que se asignará al valor. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_semi_circle_chart +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Semi Circle Chart" +msgstr "Gráfico de semicírculo" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_21 +msgid "Semi Circle Pie Chart" +msgstr "Gráfico circular semicircular" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_send_mail +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Send Mail" +msgstr "Enviar correo" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +msgid "Separator Name" +msgstr "Nombre del separador" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__sequence +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__sequence +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__ks_sequence +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Sequence" +msgstr "Secuencia" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__name_seq +msgid "Sequential Queue ID" +msgstr "ID de cola secuencial" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.action_dashboard_ninja_config_settings +#: model:ir.ui.menu,name:ks_dashboard_ninja.menu_dashboard_ninja_config_settings +msgid "Settings" +msgstr "Ajustes" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_unit +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Show Custom Unit" +msgstr "Mostrar unidad personalizada" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_data_value +msgid "Show Data Value" +msgstr "Mostrar valor de los datos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_label_type +msgid "Show Data Value Type" +msgstr "Mostrar tipo de valor de datos" + +#. module: ks_dashboard_ninja +#: model:res.groups,name:ks_dashboard_ninja.ks_dashboard_ninja_group_manager +msgid "Show Full Dashboard Features" +msgstr "Mostrar todas las funciones del panel" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_hide_legend +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Show Legend" +msgstr "Mostrar leyenda" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_radial_legend +msgid "Show Radial Legend" +msgstr "Mostrar leyenda radial" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_records +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Show Records" +msgstr "Mostrar registros" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_goal_bar_line +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Show Target As Line" +msgstr "Mostrar objetivo como línea" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__ks_top_menu_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__ks_top_menu_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_top_menu_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__ks_top_menu_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__ks_top_menu_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_import_dashboard_form_view +msgid "Show Under Menu" +msgstr "Mostrar en el menú" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__ks_show_api_key +msgid "Show key" +msgstr "Mostrar clave" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_standard_goal_value +msgid "Show the set target" +msgstr "Mostrar el objetivo establecido" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_goal_enable +msgid "Show the set target." +msgstr "Mostrar el objetivo establecido." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_menu_sequence +msgid "Smallest sequence give high priority and Highest sequence give low priority" +msgstr "La secuencia más pequeña da alta prioridad y la secuencia más alta da baja prioridad" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_sort_by_field +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_sort_by_field +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Sort By Field" +msgstr "Ordenar por campo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_sort_by_order +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_sort_by_order +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Sort Order" +msgstr "Orden de clasificación" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_bar_chart_stacked +msgid "Stack the columns of the same record. " +msgstr "Apilar las columnas del mismo registro. " + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_bar_chart_stacked +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Stacked Bar Chart" +msgstr "Gráfico de barras apiladas" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_standard_goal_value +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Standard Target" +msgstr "Objetivo estándar" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_start_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_item_start_date +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Start Date" +msgstr "Fecha de inicio" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Status" +msgstr "Estado" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_stop_mail_cron +msgid "Stop mail cron" +msgstr "Detener el cron del correo" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Sub Group By" +msgstr "Subgrupo por" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Sub Group By Date" +msgstr "Subgrupo por fecha" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_data_count_type__sum +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_comparison__sum +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type_2__sum +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type__sum +msgid "Sum" +msgstr "Suma" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Sync Data" +msgstr "Sincronizar datos" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Target" +msgstr "Objetivo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_goal_lines +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Target Lines" +msgstr "Líneas objetivo" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Task Lines" +msgstr "Líneas de tareas" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Tasks" +msgstr "Tareas" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__display_type +msgid "Technical field for UX purpose." +msgstr "Campo técnico para fines UX." + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Template" +msgstr "Plantilla" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_template_type +msgid "Template Format" +msgstr "Formato de plantilla" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_dashboard_item_ids +msgid "Template Type" +msgstr "Tipo de plantilla" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Template one" +msgstr "Plantilla uno" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_country_code +msgid "" +"The ISO country code in two chars. \n" +"You can use this field for quick search." +msgstr "" +"El código de país ISO en dos caracteres.\n" +"Puede utilizar este campo para una búsqueda rápida." + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__name +msgid "The item will be represented by this unique name." +msgstr "El artículo estará representado por este nombre único." + +#. module: ks_dashboard_ninja +#: model:ir.model.constraint,message:ks_dashboard_ninja.constraint_ks_dashboard_ninja_favourite_filters_name_uniq +msgid "The name of the filter must be unique!" +msgstr "¡El nombre del filtro debe ser único!" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_item_theme +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Theme" +msgstr "Tema" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_client_action +msgid "This Action will be Performed at the end of Drill Down Action" +msgstr "Esta acción se realizará al final de la acción de desglose" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__t_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__t_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__t_month +msgid "This Month" +msgstr "Este mes" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__t_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__t_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__t_quarter +msgid "This Quarter" +msgstr "Este trimestre" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__t_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__t_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__t_week +msgid "This Week" +msgstr "Esta semana" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__t_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__t_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__t_year +msgid "This Year" +msgstr "Este año" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_records +msgid "" +"This field Enable the click on \n" +" Dashboard Items to view the Odoo \n" +" default view of records" +msgstr "" +"Este campo habilita el clic en \n" +" Elementos del panel para ver Odoo \n" +" vista predeterminada de registros" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_tile +msgid "Tile" +msgstr "Titulo" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_1 +msgid "Tile (layout 1)" +msgstr "Azulejo (diseño 1)" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_3 +msgid "Tile (layout 2)" +msgstr "Azulejo (diseño 2)" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_2 +msgid "Tile (layout 3)" +msgstr "Azulejo (diseño 3)" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_12 +msgid "Tile (layout 4)" +msgstr "Azulejo (diseño 4)" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_4 +msgid "Tile (layout 5)" +msgstr "Azulejo (diseño 5)" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_13 +msgid "Tile (layout 6)" +msgstr "Azulejo (diseño 6)" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_format +msgid "To Change the number format showing in chart to given option" +msgstr "Para cambiar el formato de número que se muestra en el gráfico a la opción dada" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_to_do +msgid "To Do" +msgstr "Para Hacer" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_to_do_data +msgid "To Do Data in JSon" +msgstr "Para hacer datos en JSon" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_to_do_preview +msgid "To Do Preview" +msgstr "Vista previa de tareas pendientes" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_data_limit_visibility +msgid "To enable the record data limit field" +msgstr "Para habilitar el campo de límite de datos de registro" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_day +msgid "Today" +msgstr "Hoy" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_button_color +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Top Button Color" +msgstr "Color del botón superior" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__ttype +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__ttype +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__ttype +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__ttype +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Type" +msgstr "Tipo" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count_type +msgid "Type of record how record will show as count,sum and average of the record" +msgstr "Tipo de registro: cómo se mostrará el registro como recuento, suma y promedio del registro" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_res_config_settings__url +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "URL" +msgstr "URL" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_list_view_type__ungrouped +msgid "Un-Grouped" +msgstr "No agrupado" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_set_interval +msgid "Update Interval for new items only" +msgstr "Intervalo de actualización solo para artículos nuevos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_csv_field +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Upload CSV File" +msgstr "Subir archivo CSV" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__ks_import_dashboard +msgid "Upload Dashboard" +msgstr "Panel de carga" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_import_dashboard_form_view +msgid "Upload Dashboard Json" +msgstr "Subir JSON del panel" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__upload_excel +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Upload Excel File" +msgstr "Subir archivo de Excel" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_icon +msgid "Upload Icon" +msgstr "Icono de carga" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__ks_goal_value +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_label_type__value +msgid "Value" +msgstr "Valor" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_target_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "View" +msgstr "Vista" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_tree +msgid "View Items" +msgstr "Ver artículos" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__week +msgid "Week" +msgstr "Semana" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__td_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__td_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__td_week +msgid "Week to Date" +msgstr "Semana hasta la fecha" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_label_type +msgid "When \"Show Data Value Type\" selected this field enables to select label type in percent or value" +msgstr "Cuando se selecciona \"Mostrar tipo de valor de datos\", este campo permite seleccionar el tipo de etiqueta en porcentaje o valor" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__year +msgid "Year" +msgstr "Año" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__td_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__td_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__td_year +msgid "Year to Date" +msgstr "El año hasta la fecha" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__zoom_enabled +msgid "Zoom enabled?" +msgstr "¿Zoom habilitado?" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_group_by__ttype__char +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_new__ttype__char +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_group_by__ttype__char +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_new__ttype__char +msgid "char" +msgstr "limpiar" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_group_by__ttype__date +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_new__ttype__date +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_group_by__ttype__date +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_new__ttype__date +msgid "date" +msgstr "fecha" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_group_by__ttype__datetime +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_new__ttype__datetime +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_group_by__ttype__datetime +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_new__ttype__datetime +msgid "datetime" +msgstr "fecha y hora" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_group_by__ttype__float +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_new__ttype__float +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_group_by__ttype__float +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_new__ttype__float +msgid "float" +msgstr "flotar" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__grid_corners +msgid "grid corners" +msgstr "esquinas de la cuadrícula" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_group_by__ttype__integer +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_new__ttype__integer +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_group_by__ttype__integer +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_new__ttype__integer +msgid "integer" +msgstr "entero" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_8 +msgid "list view (Un-Grouped)" +msgstr "vista de lista (agrupada)" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_28 +msgid "list view (grouped)" +msgstr "vista de lista (agrupada)" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_target_deviation_field +msgid "list_field_id" +msgstr "id del campo de lista" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_to_do_description +msgid "to do description" +msgstr "descripción de la tarea" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_to_do_headers +msgid "to do headers" +msgstr "para hacer encabezados" diff --git a/third_party_addons/ks_dashboard_ninja/i18n/it.po b/third_party_addons/ks_dashboard_ninja/i18n/it.po new file mode 100644 index 000000000..0f1f62028 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/i18n/it.po @@ -0,0 +1,3509 @@ +# Translation of Odoo Server. +# This file contains the translation of the following modules: +# * ks_dashboard_ninja +# +msgid "" +msgstr "" +"Project-Id-Version: Odoo Server 18.0+e-20250415\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2025-05-17 16:33+0000\n" +"PO-Revision-Date: 2025-05-17 16:33+0000\n" +"Last-Translator: \n" +"Language-Team: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: \n" +"Plural-Forms: \n" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_dashboard_board_id +msgid "" +"\n" +" Items Configuration and their position in the dashboard will be copied from the selected dashboard \n" +" and will be saved as template.\n" +" " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_previous_period +msgid " Compare With Previous Period " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_relation_groupby +msgid " Define the x-axis of the graph. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_year_period +msgid " Display the record for the same Date field for the last year. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_data_value +msgid " Display value on the graph. . " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_pastwithout_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_pastwithout_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_pastwithout_now +msgid " Past Excluding Today" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_compare_period +msgid "" +" Provide the number of Date Filter Selection you want to include while " +"displaying the record." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_data_limit +msgid " Records to be displayed on the graph" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_background_color +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_header_bg_color +msgid " Select the background color with transparency. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_fields +msgid " Select the fields you want to display in the list. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_layout +msgid " Select the layout to display records. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_sort_by_order +msgid " Select the order of the sorting. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_target_view +msgid " Select the view to compare target with data." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_relation_sub_groupby +msgid " Sub Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__60000 +msgid "1 minute" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__600000 +msgid "10 minute" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__res_config_settings__ks_analysis_word_length__100 +msgid "100 words" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__15000 +msgid "15 Seconds" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__res_config_settings__ks_analysis_word_length__150 +msgid "150 words" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__120000 +msgid "2 minute" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__res_config_settings__ks_analysis_word_length__200 +msgid "200 words" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__30000 +msgid "30 Seconds" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__45000 +msgid "45 Seconds" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_set_interval__300000 +msgid "5 minute" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__res_config_settings__ks_analysis_word_length__50 +msgid "50 words" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "" +"\n" +" **File names should not contain any special characters. File name can have\n" +" Spaces or separated by Underscores(_).\n" +" " +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "" +"\n" +" **Field in sort by column must match atleast one field given in\n" +" measures column.\n" +" " +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "" +"\n" +" ** Please enter positive standard target.\n" +" " +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_ai_analysis +msgid "AI Analysis" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_res_config_settings__ks_analysis_word_length +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "AI Analysis length" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_dashboard_ninja_ai_action +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_ai_dashboard +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_arti_int +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "AI Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_dashboard_ninja_ai_dashboardaction +msgid "AI whole Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__ks_access_id +msgid "Access Id" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__ks_action +msgid "Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_item_action_field +msgid "Action Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_action_lines +msgid "Action Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_action_item_name +msgid "Action item name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_actions +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Actions" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_active +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_is_active +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Active" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__ks_active +msgid "Active Description" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_create_dashboard_wizard +msgid "Add New Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Add a Line" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Add a Section" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Add a filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Add a separator" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Advance Configuration" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Advance Settings" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "" +"All Target Lines Changes Will be reflected on Chart after saving the record\n" +" and\n" +" pagination will be ignore ." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_none +msgid "All Time" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board__multi_layouts +msgid "Allow user to have multiple layouts of the same Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_multiplier_active +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Apply Multiplier" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_delete_dashboard_wizard_form +msgid "Are you sure you want to delete this dashboard ?" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_area_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_area_chart +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_15 +msgid "Area Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_23 +msgid "Area Chart with data values" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_sort_by_order__asc +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_sort_by_order__asc +msgid "Ascending" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Auto Update" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_data_count_type__average +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type_2__average +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type__average +msgid "Average" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_background_color +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Background Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_bar_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_bar_chart +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_5 +msgid "Bar Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_20 +msgid "Bar Chart With Data Values" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Below action will be performed at the end of the Drill Down Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__board_type +msgid "Board Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_bullet_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_bullet_chart +msgid "Bullet Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_bullet_preview +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Bullet Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__data_source__csv +msgid "CSV" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__csv_bool +msgid "CSV Bool" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_csv_group_by_lines +msgid "CSV Group By Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_action +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_delete_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_duplicate_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_fetch_key_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_import_dashboard_form_view +msgid "Cancel" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_item_color +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Chart Color Palette" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_data +msgid "Chart Data in string form" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_previous_period +msgid "" +"Checkbox to show comparison between the data of present day and the previous" +" selected period. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_child_board__board_type__child +msgid "Child" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_icon_select +msgid "Choose the Icon option. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_is_client_action +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Client Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Client Action Item" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_client_action +msgid "Client Item Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_format__colombian +msgid "Colombian Peso Format" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Column Data Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__company_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_company_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.child_board_tree +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Company" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Compare With Previous Period" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_res_config_settings +msgid "Config Settings" +msgstr "Impostazioni di configurazione" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.configuration_menu +msgid "Configuration" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_data_count_type__count +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type_2__count +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type__count +msgid "Count" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Count..." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_country_id +msgid "Country" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_country_code +msgid "Country Code" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Create Table" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_delete_wizard__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__create_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__create_uid +msgid "Created by" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_delete_wizard__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__create_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__create_date +msgid "Created on" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_cumulative +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Cumulative As Line" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_cumulative_field +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Cumulative Fields" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_currency_id +msgid "Currency" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board_template__ks_template_type__ks_custom +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_icon_select__custom +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_unit_selection__custom +msgid "Custom" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_custom +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_custom +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_custom +msgid "Custom Filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Custom Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_calculation_type__query +msgid "Custom Query" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_item_color__dark +msgid "Dark" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__ks_dashboard_board_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_dashboard_board_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_dashboard_board_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__ks_dashboard_board_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_ninja_board_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.child_board_tree +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item +msgid "Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_res_config_settings__dn_api_key +msgid "Dashboard AI API Key" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Dashboard API Key" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Dashboard Charts Configurations" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_wizard +msgid "Dashboard Creation Wizard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_custom_filters_ids +msgid "Dashboard Custom Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +msgid "Dashboard Defined Filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_delete_wizard +msgid "Dashboard Delete Wizard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_duplicate_wizard +msgid "Dashboard Duplicate Wizard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_favourite_filters_ids +msgid "Dashboard Favourite Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dn_dashboard_image +msgid "Dashboard Image" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__ks_dashboard_csv_group_by_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__ks_dashboard_item_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_dashboard_item_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__ks_dashboard_item +msgid "Dashboard Item" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_action +msgid "Dashboard Item Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_date_groupby +msgid "Dashboard Item Chart Group By Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_date_sub_groupby +msgid "Dashboard Item Chart Sub Group By Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__ks_dashboard_group_by_id +msgid "Dashboard Item Id" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_item_type +msgid "Dashboard Item Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.item_action_window +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_items_ids +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__ks_dashboard_item_ids +msgid "Dashboard Items" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.child_board_tree +msgid "Dashboard Layout" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.dashboard_layout_menu +msgid "Dashboard Layouts" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.board_form_tree_action_window +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_delete_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_duplicate_dashboard_wizard_form +msgid "Dashboard Manager" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__ks_dash_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__name +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Dashboard Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_board +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Dashboard Ninja" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Dashboard Ninja Api Key" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_child_board +msgid "Dashboard Ninja Child Board" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_board_custom_filters +msgid "Dashboard Ninja Custom Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_board_defined_filters +msgid "Dashboard Ninja Defined Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_favourite_filters +msgid "Dashboard Ninja Favourite Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_csv_group_by +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_group_by +msgid "Dashboard Ninja Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_ninja_dashboard_item_action +msgid "Dashboard Ninja Item Actions" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_item_action +msgid "Dashboard Ninja Items Action Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_item_goal +msgid "Dashboard Ninja Items Goal Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_item_multiplier +msgid "Dashboard Ninja Items Multiplier Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_kpi_mail +msgid "Dashboard Ninja Kpi mail" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_csv_new +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_new +msgid "Dashboard Ninja New" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.module.category,name:ks_dashboard_ninja.ks_dashboard_ninja_security_groups +msgid "Dashboard Ninja Rights" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_board_template +msgid "Dashboard Ninja Template" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_item +msgid "Dashboard Ninja items" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_defined_filters_ids +msgid "Dashboard Predefined Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.template_tree_action_window +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__ks_template +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_default_template +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_board_template_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__ks_template +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_template_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_template_tree +msgid "Dashboard Template" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.layout_tree_action_window +msgid "Dashboard layout" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.dashboard_menu +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Dashboards" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data #2" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data Calculation" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_calculation_type +msgid "Data Calculation Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_kpi_type__layout_2 +msgid "Data Comparison" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_measure_field_2 +msgid "Data Points displayed with a line in the graph. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__data_source +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data Source" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_as_of_now +msgid "Data Till Now" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_data_count_type +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Data Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_cumulative_field +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_measure_field +msgid "Data points to be selected." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__ks_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__ks_import_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_import_model +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_import_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__ks_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_id +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_model_id +msgid "" +"Data source to fetch and read the data for the creation of dashboard items. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__ks_goal_date +msgid "Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_field +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Date Filter Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_selection +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Date Filter Selection" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__day +msgid "Day" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_child_board__board_type__default +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_item_color__default +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_icon_select__default +msgid "Default" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "" +"Default Date\n" +" Filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_date_filter_selection +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Default Date Filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_default_end_time +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Default End Time" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_calculation_type__custom +msgid "Default Query" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_set_interval +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Default Update Interval" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_extension +msgid "Define conditions for filter to write manually" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_domain +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain +msgid "Define conditions for filter. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_delete_dashboard_wizard_form +msgid "Delete" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_delete_dashboard_wizard +msgid "Delete Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_sort_by_order__desc +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_sort_by_order__desc +msgid "Descending" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__ks_description +msgid "Description" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Deviation Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_precision_digits +msgid "Digits" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_discuss_channel +msgid "Discussion Channel" +msgstr "Canale di discussione" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Display" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_delete_wizard__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__display_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__display_name +msgid "Display Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__display_type +msgid "Display Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_as_of_now +msgid "Display the total sum of each legends as it grows with times" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_unit +msgid "Display the unit of the data." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_domain +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Domain" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_extension +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Domain Extension" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__ks_domain_field_id +msgid "Domain Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_domain_temp +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_temp +msgid "Domain Substitute" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_doughnut_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_doughnut_chart +msgid "Doughnut Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_11 +msgid "Doughnut chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_25 +msgid "Doughnut semi circle" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.server,name:ks_dashboard_ninja.ks_duplicate_dashboard +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_ninja_dashboard_item_action__ks_action__duplicate +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_duplicate_dashboard_wizard_form +msgid "Duplicate" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_duplicate_dashboard_wizard +msgid "Duplicate Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_duplicate_dashboard_wizard_form +msgid "Duplicate Image" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_email_to_ids +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Email Address" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__ks_email_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_res_config_settings__ks_email_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Email ID" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__name +msgid "Email To:" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__multi_layouts +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Enable Multi-Dashboard Layouts" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_goal_enable +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enable Target" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Enable Zooming" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_res_config_settings__enable_chart_zoom +msgid "Enable Zooming for charts" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Enable Zooming for charts on mouse scroll" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_end_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_item_end_date +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "End Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_format__global +msgid "English Format" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Enter Dashboard Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Data Calculation" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Data Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Date Filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Default Date Filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Deviation Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Domain" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Email Address" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter End Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Fields to show in list" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +msgid "Enter Filter Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Icon Option" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Item Description" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Layout" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Line Measure" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter List View Grouped Fields" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter List View Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Measure" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Measure X" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Measures" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Enter Menu Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Enter Menu Sequence" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Enter Model" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Model Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Multiplier" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Pagination Limit" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Record Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Record Limit" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Record Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Record Value" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Scatter Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +msgid "Enter Separator Name (eg. Order States, Deadlines)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Enter Sequence" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Standard Target" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Start Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_unit +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Enter Unit" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_data_formatting__exact +msgid "Exact" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_format__exact +msgid "Exact Value" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__data_source__excel +msgid "Excel" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__excel_bool +msgid "Excel Bool" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_export_all_records +msgid "Export All Records" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_fetch_key +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_fetch_key +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_fetch_key_form_view +msgid "Fetch API key" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_fetch_key_form_view +msgid "Fetch Key" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_fields +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Fields to show in list" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__filename +msgid "Filename" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_fill_temporal +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Fill Temporal Value" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__ks_filter +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Filter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__name +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +msgid "Filter Label" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_flower_view_preview +msgid "Flower Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_flower_view +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_flower_view +msgid "Flower View" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_font_color +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Font Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_data_formatting +msgid "Format" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_funnel_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_funnel_chart +msgid "Funnel Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_funnel_preview +msgid "Funnel Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_funnel_record_field +msgid "Funnel Record Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_future_starting_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_future_starting_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_future_starting_now +msgid "Future Starting Now" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_futurestarting_tomorrow +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_futurestarting_tomorrow +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_futurestarting_tomorrow +msgid "Future Starting Tomorrow" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Generate Item" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +msgid "Generate dashboard with AI" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Generate with" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Generate with AI" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__ks_api_key +msgid "Generated AI API Key" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "Get API key" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__sequence +msgid "" +"Gives the sequence order when displaying a list of payment terms lines." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_data_formatting__global +msgid "Global" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Goal Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_graph_preview +msgid "Graph Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_group_access +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Group Access" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.action_group_by +#: model:ir.actions.act_window,name:ks_dashboard_ninja.csv_action_group_by +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_relation_groupby +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_item_action_date_groupby +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Group By Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_group_by_lines +msgid "Group By Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_list_view_type__grouped +msgid "Grouped" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Groups/Dimensions" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__ks_to_do_header +msgid "Header" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_header_bg_color +msgid "Header Background Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_hide_legend +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_radial_legend +msgid "Hide all legend from the chart item" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_9 +msgid "Horizontal Bar" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_horizontalbar_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_horizontalbar_chart +msgid "Horizontal Bar Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_22 +msgid "Horizontal Bar(sub-group)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__hour +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__hour +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__hour +msgid "Hour" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_delete_wizard__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__id +msgid "ID" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_default_icon +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Icon" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_default_icon_color +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Icon Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_icon_select +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Icon Option" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.ks_import_dashboard_action +#: model:ir.model,name:ks_dashboard_ninja.model_ks_dashboard_ninja_import +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_import_dashboard_form_view +msgid "Import Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.ks_import_dashboard_menu +msgid "Import Dashboards" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.inbox_menu +msgid "Inbox" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_compare_period +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Include Period" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_data_formatting__indian +msgid "Indian" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_format__indian +msgid "Indian Format" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__is_bookmarked +msgid "Is Bookmarked" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_is_cumulative +msgid "Is Cumulative" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_active +msgid "Is Selected" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Item Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_gridstack_config +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_gridstack_config +msgid "Item Configurations" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_info +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Item Description" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_chart_type +msgid "Item Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_kpi +msgid "KPI" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_kpi_data +msgid "KPI Data" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_extension_2 +msgid "KPI Domain Extension" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_compare_period_2 +msgid "KPI Include Period" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count_2 +msgid "KPI Record Count" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_year_period_2 +msgid "KPI Same Period Previous Years" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_kpi_type__layout_1 +msgid "KPI With Target" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_arti_int__ks_type__ks_keyword +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Keywords" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_18 +msgid "Kpi ( Number)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_17 +msgid "Kpi ( Percentage)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_27 +msgid "Kpi (previous)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_19 +msgid "Kpi (sum)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_26 +msgid "Kpi 26(Average)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_comparison +msgid "Kpi Data Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_field_2 +msgid "Kpi Date Filter Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_selection_2 +msgid "Kpi Date Filter Selection" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_2 +msgid "Kpi Domain" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_domain_2_temp +msgid "Kpi Domain Substitute" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_item_end_date_2 +msgid "Kpi End Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_kpi_type +msgid "Kpi Layout" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_id_2 +msgid "Kpi Model" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_name_2 +msgid "Kpi Model Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_kpi_preview +msgid "Kpi Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_16 +msgid "Kpi Ratio" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_field_2 +msgid "Kpi Record Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count_type_2 +msgid "Kpi Record Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_item_start_date_2 +msgid "Kpi Start Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.server,name:ks_dashboard_ninja.ir_cron_send_target_email_ir_actions_server +msgid "Kpi mail cron" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_type +msgid "Ks AI Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_ai_explain_dash +msgid "Ks Ai Explain Dash" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_bounds +msgid "Ks Bounds" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_groupby_type +msgid "Ks Chart Groupby Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_sub_groupby_type +msgid "Ks Chart Sub Groupby Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_child_dashboard_ids +msgid "Ks Child Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_computed_group_access +msgid "Ks Computed Group Access" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_discuss_channel__ks_dashboard_board_id +msgid "Ks Dashboard Board" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_client_action_id +msgid "Ks Dashboard Client Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_discuss_channel__ks_dashboard_item_id +msgid "Ks Dashboard Item" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_menu_id +msgid "Ks Dashboard Menu" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_state +msgid "Ks Dashboard State" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_db_name +msgid "Ks Db Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_db_password +msgid "Ks Db Password" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_db_user +msgid "Ks Db User" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dn_header_lines +msgid "Ks Dn Header Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__ks_dn_item_id +msgid "Ks Dn Item" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__ks_filter_type +msgid "Ks Filter Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_gridstack_config +msgid "Ks Gridstack Config" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_host +msgid "Ks Host" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_is_external_db +msgid "Ks Is External Db" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_isDateFilterApplied +msgid "Ks Isdatefilterapplied" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_item_action_field_type +msgid "Ks Item Action Field Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_item_count +msgid "Ks Item Count" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_input_keywords +msgid "Ks Keywords" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_many2many_field_ordering +msgid "Ks Many2Many Field Ordering" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_model_show +msgid "Ks Model Show" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_partners_map +msgid "Ks Partners Map" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_port +msgid "Ks Port" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__ks_to_do_description_lines +msgid "Ks To Do Description Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__ks_to_do_header_id +msgid "Ks To Do Header" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_month +msgid "Last 30 days" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_year +msgid "Last 365 days" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_week +msgid "Last 7 days" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_quarter +msgid "Last 90 days" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_day +msgid "Last Day" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_month +msgid "Last Month" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_quarter +msgid "Last Quarter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_delete_wizard__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__write_uid +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__write_uid +msgid "Last Updated by" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_delete_wizard__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_favourite_filters__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_kpi_mail__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_description__write_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_to_do_headers__write_date +msgid "Last Updated on" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_week +msgid "Last Week" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_year +msgid "Last Year" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_layout +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Layout" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout1 +msgid "Layout 1" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout2 +msgid "Layout 2" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout3 +msgid "Layout 3" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout4 +msgid "Layout 4" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout5 +msgid "Layout 5" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_layout__layout6 +msgid "Layout 6" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Layout..." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_line_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_line_chart +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_6 +msgid "Line Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_24 +msgid "Line Chart with values" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_measure_field_2 +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Line Measure" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_list_view +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_list_view +msgid "List View" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_data +msgid "List View Data in JSon" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_group_fields +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "List View Grouped Fields" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_preview +msgid "List View Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_type +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "List View Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_map_chart_relation_groupby +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Map Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_map_preview +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Map Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_map_record_field +msgid "Map Record Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_map_view +msgid "Map View" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_item_color__material +msgid "Material" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_unit +msgid "Maximum limit 5 characters, for ex: km, m" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Measure" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_measure_field +msgid "Measure 1" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_scatter_measure_x_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Measure X" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_scatter_measure_y_id +msgid "Measure Y" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Measures" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__ks_menu_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_menu_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_dashboard_menu_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__ks_menu_name +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Menu Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_menu_sequence +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Menu Sequence" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__minute +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__minute +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__minute +msgid "Minute" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__ks_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__ks_import_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_import_model +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_custom_filters__ks_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_model_id +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_arti_int__ks_type__ks_model +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Model" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__model_bool +msgid "Model Bool" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_arti_int__ks_import_model_id +msgid "Model ID" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__ks_model_name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_model_name +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Model Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Model..." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_unit_selection__monetary +msgid "Monetary" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__month +msgid "Month" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__td_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__td_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__td_month +msgid "Month to Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__month_year +msgid "Month-Year" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_item_color__moonrise +msgid "Moonrise" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.server,name:ks_dashboard_ninja.ks_move_dashboard +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_ninja_dashboard_item_action__ks_action__move +msgid "Move" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__ks_multiplier_value +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_multiplier +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Multiplier" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_item_multiplier__ks_multiplier_fields +msgid "Multiplier Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_multiplier_lines +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Multiplier Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.client,name:ks_dashboard_ninja.dashboard_action_window +#: model:ir.ui.menu,name:ks_dashboard_ninja.board_menu_root +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_tree +msgid "My Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.dashboards_menu_root +msgid "My Dashboards" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__name +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__name +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__name_seq +msgid "Name Seq" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_company_id +msgid "" +"Name of the company for which analytics will be displayed in the dashboard. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Name..." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_day +msgid "Next Day" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_month +msgid "Next Month" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_quarter +msgid "Next Quarter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_week +msgid "Next Week" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__n_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__n_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__n_year +msgid "Next Year" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_comparison__none +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_none +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_none +msgid "None" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_target_view__number +msgid "Number" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_format +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Number System" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__data_source__odoo +msgid "Odoo" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.overview_menu +msgid "Overview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_pagination_limit +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Pagination Limit" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__ls_past_until_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__ls_past_until_now +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__ls_past_until_now +msgid "Past Till Now" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_label_type__percent +msgid "Percent" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_comparison__percentage +msgid "Percentage" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_pie_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_pie_chart +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_14 +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_7 +msgid "Pie Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_10 +msgid "Polar Area" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_polararea_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_polararea_chart +msgid "Polar Area Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Pre Defined Filters" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board_template__ks_template_type__ks_default +msgid "Predefined" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_preview +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_target_view__progress_bar +msgid "Progress Bar" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_multiplier +msgid "Provides the multiplication of record value" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_multiplier_active +msgid "Provides the visibility of multiplier field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__quarter +msgid "Quarter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__td_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__td_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__td_quarter +msgid "Quarter to Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.ui.menu,name:ks_dashboard_ninja.quick_access_menu +msgid "Quick Access" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_radar_view +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_radar_view +msgid "Radar View" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_radialbar_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_radialbar_chart +msgid "Radial Bar Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_radial_preview +msgid "Radial Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_comparison__ratio +msgid "Ratio" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count +msgid "Record Count" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_field +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Record Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Record Field..." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_data_limit +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_record_limit +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Record Limit" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_data_limit_visibility +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Record Limit Data Visibility" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count_type +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Record Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_quick_edit_form_view +msgid "Record Value" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_actions +msgid "Redirects you to the selected view. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_year_period +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Same Period Previous Years" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_action +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_import_dashboard_form_view +msgid "Save" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_scatter_chart +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_chart_type__ks_scatter_chart +msgid "Scatter Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_is_scatter_group +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Scatter Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_scatter_field_id +msgid "Scatter Points" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_item_search_view +msgid "Search Items" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board_defined_filters__display_type__line_section +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Section" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Background Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Client Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Company" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_child_board__ks_dashboard_ninja_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__ks_dashboard_ninja_id +msgid "Select Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_ninja_dashboard_item_action__ks_dashboard_ninja_ids +msgid "Select Dashboards" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Select End Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Font Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Group By Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Icon" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Icon Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Item Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Map Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_dashboard_ninja_ai_form_view +msgid "Select Model" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Select Multiple Group Access" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_duplicate_dashboard_wizard_form +msgid "Select Show Under Menu" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Sort By Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Sort Order" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Select Start Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Sub Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Sub Group By Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Select Template" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Theme" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Top Button Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Select Under Menu" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_unit_selection +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select Unit Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Select View" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_selection +msgid "Select interval of the records to be displayed. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_item_theme +msgid "Select the color theme for the display. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_view_type +msgid "Select the desired list view type. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_sort_by_field +msgid "Select the desired sorting preference. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_item_color +msgid "Select the display preference. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_date_filter_field +msgid "Select the field for which Date Filter should be applicable." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_font_color +msgid "Select the font color. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_default_icon +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_default_icon_color +msgid "Select the icon to be displayed. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_item_type +msgid "Select the required type of dashboard to display. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_chart_relation_sub_groupby +msgid "Select the second level of grouping. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_calculation_type +msgid "Select the type of calculation you want to perform on the data." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_unit_selection +msgid "Select the unit to be assigned to the value. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_semi_circle_chart +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Semi Circle Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_21 +msgid "Semi Circle Pie Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_send_mail +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Send Mail" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +msgid "Separator Name" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__sequence +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__sequence +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__ks_sequence +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Sequence" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__name_seq +msgid "Sequential Queue ID" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.actions.act_window,name:ks_dashboard_ninja.action_dashboard_ninja_config_settings +#: model:ir.ui.menu,name:ks_dashboard_ninja.menu_dashboard_ninja_config_settings +msgid "Settings" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_unit +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Show Custom Unit" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_data_value +msgid "Show Data Value" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_label_type +msgid "Show Data Value Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:res.groups,name:ks_dashboard_ninja.ks_dashboard_ninja_group_manager +msgid "Show Full Dashboard Features" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_hide_legend +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Show Legend" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_radial_legend +msgid "Show Radial Legend" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_records +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Show Records" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_goal_bar_line +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Show Target As Line" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_duplicate_wizard__ks_top_menu_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_ai_dashboard__ks_top_menu_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_top_menu_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__ks_top_menu_id +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_wizard__ks_top_menu_id +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_ai_whole_dashboard_form_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_import_dashboard_form_view +msgid "Show Under Menu" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_fetch_key__ks_show_api_key +msgid "Show key" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_standard_goal_value +msgid "Show the set target" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_goal_enable +msgid "Show the set target." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_menu_sequence +msgid "" +"Smallest sequence give high priority and Highest sequence give low priority" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_sort_by_field +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_sort_by_field +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Sort By Field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_sort_by_order +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_action__ks_sort_by_order +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Sort Order" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_bar_chart_stacked +msgid "Stack the columns of the same record. " +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_bar_chart_stacked +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Stacked Bar Chart" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_standard_goal_value +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Standard Target" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_dashboard_start_date +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_item_start_date +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Start Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_defined_filters +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Status" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_stop_mail_cron +msgid "Stop mail cron" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Sub Group By" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Sub Group By Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_data_count_type__sum +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_comparison__sum +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type_2__sum +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_record_count_type__sum +msgid "Sum" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Sync Data" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Target" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_goal_lines +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Target Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Task Lines" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Tasks" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board_defined_filters__display_type +msgid "Technical field for UX purpose." +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_create_dashboard_wizard_form +msgid "Template" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_template_type +msgid "Template Format" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_board_template__ks_dashboard_item_ids +msgid "Template Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_form +msgid "Template one" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_country_code +msgid "" +"The ISO country code in two chars. \n" +"You can use this field for quick search." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__name +msgid "The item will be represented by this unique name." +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.constraint,message:ks_dashboard_ninja.constraint_ks_dashboard_ninja_favourite_filters_name_uniq +msgid "The name of the filter must be unique!" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_dashboard_item_theme +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Theme" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_client_action +msgid "This Action will be Performed at the end of Drill Down Action" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__t_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__t_month +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__t_month +msgid "This Month" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__t_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__t_quarter +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__t_quarter +msgid "This Quarter" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__t_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__t_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__t_week +msgid "This Week" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__t_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__t_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__t_year +msgid "This Year" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_show_records +msgid "" +"This field Enable the click on \n" +" Dashboard Items to view the Odoo \n" +" default view of records" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_tile +msgid "Tile" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_1 +msgid "Tile (layout 1)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_3 +msgid "Tile (layout 2)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_2 +msgid "Tile (layout 3)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_12 +msgid "Tile (layout 4)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_4 +msgid "Tile (layout 5)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_13 +msgid "Tile (layout 6)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_format +msgid "To Change the number format showing in chart to given option" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_dashboard_item_type__ks_to_do +msgid "To Do" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_to_do_data +msgid "To Do Data in JSon" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_to_do_preview +msgid "To Do Preview" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_data_limit_visibility +msgid "To enable the record data limit field" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__l_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__l_day +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__l_day +msgid "Today" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_button_color +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Top Button Color" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_group_by__ttype +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_csv_new__ttype +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_group_by__ttype +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_new__ttype +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Type" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_record_count_type +msgid "" +"Type of record how record will show as count,sum and average of the record" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_res_config_settings__url +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.res_config_settings_inherit_view +msgid "URL" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_list_view_type__ungrouped +msgid "Un-Grouped" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_board__ks_set_interval +msgid "Update Interval for new items only" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_csv_field +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Upload CSV File" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_import__ks_import_dashboard +msgid "Upload Dashboard" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.ks_import_dashboard_form_view +msgid "Upload Dashboard Json" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__upload_excel +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "Upload Excel File" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_icon +msgid "Upload Icon" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item_goal__ks_goal_value +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_data_label_type__value +msgid "Value" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_target_view +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.item_form_view +msgid "View" +msgstr "" + +#. module: ks_dashboard_ninja +#: model_terms:ir.ui.view,arch_db:ks_dashboard_ninja.board_tree +msgid "View Items" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__week +msgid "Week" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__td_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__td_week +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__td_week +msgid "Week to Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_data_label_type +msgid "" +"When \"Show Data Value Type\" selected this field enables to select label " +"type in percent or value" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_groupby__year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_chart_date_sub_groupby__year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item_action__ks_item_action_date_groupby__year +msgid "Year" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_board__ks_date_filter_selection__td_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection_2__td_year +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_ninja_item__ks_date_filter_selection__td_year +msgid "Year to Date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__zoom_enabled +msgid "Zoom enabled?" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_group_by__ttype__char +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_new__ttype__char +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_group_by__ttype__char +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_new__ttype__char +msgid "char" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_group_by__ttype__date +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_new__ttype__date +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_group_by__ttype__date +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_new__ttype__date +msgid "date" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_group_by__ttype__datetime +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_new__ttype__datetime +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_group_by__ttype__datetime +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_new__ttype__datetime +msgid "datetime" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_group_by__ttype__float +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_new__ttype__float +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_group_by__ttype__float +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_new__ttype__float +msgid "float" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__grid_corners +msgid "grid corners" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_group_by__ttype__integer +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_csv_new__ttype__integer +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_group_by__ttype__integer +#: model:ir.model.fields.selection,name:ks_dashboard_ninja.selection__ks_dashboard_new__ttype__integer +msgid "integer" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_8 +msgid "list view (Un-Grouped)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ks_dashboard_ninja.item,name:ks_dashboard_ninja.ks_default_item_28 +msgid "list view (grouped)" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,field_description:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_list_target_deviation_field +msgid "list_field_id" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_to_do_description +msgid "to do description" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model,name:ks_dashboard_ninja.model_ks_to_do_headers +msgid "to do headers" +msgstr "" + +#. module: ks_dashboard_ninja +#: model:ir.model.fields,help:ks_dashboard_ninja.field_ks_dashboard_ninja_item__ks_export_all_records +msgid "" +"when click on boolean button, all the records will be downloaded which are " +"present in entire list" +msgstr "" diff --git a/third_party_addons/ks_dashboard_ninja/models/Kpi_mail.py b/third_party_addons/ks_dashboard_ninja/models/Kpi_mail.py new file mode 100644 index 000000000..3ff424843 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/Kpi_mail.py @@ -0,0 +1,9 @@ +from odoo import models, fields, api, _ + + +class KpSendMail(models.Model): + _name = 'ks_dashboard_ninja.kpi_mail' + _description = 'Dashboard Ninja Kpi mail' + + + name = fields.Char(string="Email To:") diff --git a/third_party_addons/ks_dashboard_ninja/models/__init__.py b/third_party_addons/ks_dashboard_ninja/models/__init__.py new file mode 100644 index 000000000..201eb09b2 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/__init__.py @@ -0,0 +1,16 @@ +from . import ks_dashboard_ninja +from . import ks_dashboard_ninja_items +from . import ks_item_action +from . import ks_child_dashboard +from . import ks_dashboard_filters +from . import ks_dashboard_templates +from . import ks_dn_to_do_item +from . import ks_import_dashboard +from . import Kpi_mail +from . import res_settings +from . import ks_ai_ninja_dashboard +from . import ks_ai_whole_dashboard +from . import ks_key_fetch +from . import ks_chat_channel + + diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_ai_ninja_dashboard.py b/third_party_addons/ks_dashboard_ninja/models/ks_ai_ninja_dashboard.py new file mode 100644 index 000000000..dc4be27b1 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_ai_ninja_dashboard.py @@ -0,0 +1,397 @@ +import base64 +import io +import json +import logging +# import osgit +from urllib.parse import quote + +import pandas as pd +import requests +from gtts import gTTS +from odoo.exceptions import ValidationError +from odoo.tools import config + +from odoo import api, fields, models, _ + +_logger = logging.getLogger(__name__) + + +class KsDashboardNInjaAI(models.TransientModel): + _name = 'ks_dashboard_ninja.arti_int' + _description = 'AI Dashboard' + + ks_type = fields.Selection([('ks_model', 'Model'), ('ks_keyword', 'Keywords')], + string="Ks AI Type", default='ks_model') + + ks_import_model_id = fields.Many2one('ir.model', string='Model ID', + domain="[('access_ids','!=',False),('transient','=',False)," + "('model','not ilike','base_import%'),'|',('model','not ilike','ir.%'),('model','=ilike','_%ir.%')," + "('model','not ilike','web_editor.%'),('model','not ilike','web_tour.%')," + "('model','!=','mail.thread'),('model','not ilike','ks_dash%'),('model','not ilike','ks_to%')]", + help="Data source to fetch and read the data for the creation of dashboard items. ") + + ks_import_model = fields.Many2one('ir.model', string='Model', + domain="[('access_ids','!=',False),('transient','=',False)," + "('model','not ilike','base_import%'),('model','not ilike','ir.%')," + "('model','not ilike','web_editor.%'),('model','not ilike','web_tour.%')," + "('model','!=','mail.thread'),('model','not ilike','ks_dash%'),('model','not ilike','ks_to%')]", + help="Data source to fetch and read the data for the creation of dashboard items. ") + ks_input_keywords = fields.Char("Ks Keywords") + ks_model_show = fields.Boolean(default = False, compute='_compute_show_model') + + @api.onchange('ks_input_keywords') + def _compute_show_model(self): + if self.ks_input_keywords and self.ks_type=="ks_keyword": + api_key = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.dn_api_key') + url = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.url') + if api_key and url: + json_data = {'name': api_key, + 'type': self.ks_type, + 'keyword': self.ks_input_keywords + } + url = url + "/api/v1/ks_dn_keyword_gen" + ks_response = requests.post(url, data=json_data) + if json.loads(ks_response.text) == False: + self.ks_model_show = True + else: + self.ks_model_show = False + else: + self.ks_model_show = False + + @api.model + def ks_get_keywords(self): + url = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.url') + if url: + url = url + "/api/v1/ks_dn_get_keyword" + ks_response = requests.post(url) + if ks_response.status_code == 200: + return json.loads(ks_response.text) + else: + return [] + + + def ks_do_action(self): + headers = {"Content-Type": "application/json", + "Accept": "application/json", + "Catch-Control": "no-cache", + } + + if self.ks_import_model_id: + ks_model_name = self.ks_import_model_id.model + ks_fields = self.env[ks_model_name].fields_get() + ks_filtered_fields = {key: val for key, val in ks_fields.items() if val['type'] not in ['many2many', 'one2many', 'binary'] and val['name'] != 'id' and val['name'] != 'sequence' and val['store'] == True} + ks_fields_name = {val['name']:val['type'] for val in ks_filtered_fields.values()} + question = ("columns: "+ f"{ks_fields_name}") + + api_key = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.dn_api_key') + url = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.url') + if api_key and url: + json_data = {'name': api_key, + 'question':question, + 'type': self.ks_type, + 'url': self.env['ir.config_parameter'].sudo().get_param('web.base.url'), + 'db_name': self.env.cr.dbname + } + url = url+"/api/v1/ks_dn_main_api" + ks_ai_response = requests.post(url, data=json_data) + if ks_ai_response.status_code == 200: + ks_ai_response = json.loads(ks_ai_response.text) + # create dummy dash to create items on the dashboard, later deleted it. + ks_create_record = self.env['ks_dashboard_ninja.board'].create({ + 'name': 'AI dashboard', + 'ks_dashboard_menu_name': 'AI menu', + 'ks_dashboard_default_template': self.env.ref('ks_dashboard_ninja.ks_blank', False).id, + 'ks_dashboard_top_menu_id': self.env['ir.ui.menu'].search([('name', '=', 'My Dashboards')])[0].id, + }) + ks_dash_id = ks_create_record.id + + ks_result = self.env['ks_dashboard_ninja.item'].create_ai_dash(ks_ai_response, ks_dash_id, + ks_model_name) + context = {'ks_dash_id': self._context['ks_dashboard_id'], + 'ks_dash_name': self.env['ks_dashboard_ninja.board'].search([ + ('id','=',self._context['ks_dashboard_id'])]).name,'ks_delete_dash_id':ks_dash_id } + + # return client action created through js for AI dashboard to render items on dummy dashboard + if (ks_result == "success"): + return { + 'type': 'ir.actions.client', + 'name': 'Generate items with AI', + 'params': {'ks_dashboard_id': ks_create_record.id, 'explain_ai_whole': True}, + 'tag': 'ks_ai_dashboard_ninja', + 'context': context, + 'target':'new' + } + else: + self.env['ks_dashboard_ninja.board'].browse(ks_dash_id).unlink() + raise ValidationError(_("Items didn't render because AI provides invalid response for this model.Please try again")) + else: + raise ValidationError(_("AI Responds with the following status:- %s") % ks_ai_response.text) + else: + raise ValidationError(_("Please enter URL and API Key in General Settings")) + else: + raise ValidationError(_("Please enter the Model")) + + + + def ks_generate_item(self): + if self.ks_input_keywords: + api_key = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.dn_api_key') + url = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.url') + if api_key and url: + json_data = {'name': api_key, + 'type': self.ks_type, + 'keyword':self.ks_input_keywords + } + url = url + "/api/v1/ks_dn_keyword_gen" + ks_response = requests.post(url, data=json_data) + else: + raise ValidationError(_("Please put API key and URL")) + if json.loads(ks_response.text) != False and ks_response.status_code==200 : + ks_ai_response = json.loads(ks_response.text) + ks_dash_id = self._context['ks_dashboard_id'] + ks_model_name = ks_ai_response[0]['model'] + ks_result = self.env['ks_dashboard_ninja.item'].create_ai_dash(ks_ai_response, ks_dash_id, + ks_model_name) + if ks_result == "success": + return{ + 'type': 'ir.actions.client', + 'tag': 'reload', + } + else: + raise ValidationError(_("Items didn't render, please try again!")) + else: + ks_model_name = self.ks_import_model.model + ks_fields = self.env[ks_model_name].fields_get() + ks_filtered_fields = {key: val for key, val in ks_fields.items() if + val['type'] not in ['many2many', 'one2many', 'binary'] and val[ + 'name'] != 'id' and val['name'] != 'sequence' and val['store'] == True} + ks_fields_name = {val['name']: val['type'] for val in ks_filtered_fields.values()} + question = ("schema: " + f"{ks_fields_name}") + model =("model:" + f"{ks_model_name}") + api_key = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.dn_api_key') + url = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.url') + if api_key and url: + json_data = {'name': api_key, + 'question': self.ks_input_keywords, + 'type':self.ks_type, + 'schema':question, + 'model':model, + 'url': self.env['ir.config_parameter'].sudo().get_param('web.base.url'), + 'db_name': self.env.cr.dbname + } + url = url + "/api/v1/ks_dn_main_api" + ks_ai_response = requests.post(url, data=json_data) + if ks_ai_response.status_code == 200: + ks_ai_response = json.loads(ks_ai_response.text) + ks_dash_id = self._context['ks_dashboard_id'] + ks_model_name = (ks_ai_response[0]['model']).lower() + if self.env['ir.model'].search([('model','=',ks_model_name)]).id or self.env['ir.model'].search([('name','=',ks_model_name)]).id: + if self.env['ir.model'].search([('name','=',ks_model_name)]).id: + ks_model_name = self.env['ir.model'].search([('name','=',ks_model_name)]).model + else: + ks_model_name = (ks_ai_response[0]['model']).lower() + ks_result = self.env['ks_dashboard_ninja.item'].create_ai_dash(ks_ai_response, ks_dash_id,ks_model_name) + if ks_result == "success": + return { + 'type': 'ir.actions.client', + 'tag': 'reload', + } + else: + raise ValidationError(_("Items didn't render, please try again!")) + else: + raise ValidationError(_("%s model does not exist.Please install")% ks_model_name) + else: + raise ValidationError( + _("AI Responds with the following status:- %s") % ks_ai_response.text) + + else: + raise ValidationError(_("Please enter URL and API Key in General Settings")) + else: + raise ValidationError(_("Enter the input keywords to render the item")) + + @api.model + def ks_generate_analysis(self, ks_items_explain, ks_rest_items, dashboard_id): + if ks_items_explain: + result = [] + api_key = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.dn_api_key') + ks_url = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.url') + words = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.ks_analysis_word_length') + url = ks_url + "/api/v1/ks_dn_main_api" + for i in range(0, len(ks_items_explain)): + if api_key and url: + json_data = {'name': api_key, + 'items': json.dumps(ks_items_explain[i]), + 'type': 'ks_ai_explain', + 'url': self.env['ir.config_parameter'].sudo().get_param('web.base.url'), + 'db_name': self.env.cr.dbname, + 'words': words if words else 100 + } + ks_response = requests.post(url, data=json_data) + if ks_response.status_code == 200 and json.loads(ks_response.text): + ks_ai_response = json.loads(ks_response.text) + item = ks_ai_response[0] + if item['analysis'] or item['insights']: + try: + self.env['ks_dashboard_ninja.item'].browse(item['id']).write({ + 'ks_ai_analysis': item['analysis'] + 'ks_gap' + item['insights'] + }) + result.append(True) + except: + result + else: + result + + else: + result + else: + raise ValidationError(_("Please put API key and URL")) + if len(result): + if self.env.context.get('explain_items_with_ai', False): + self.env['ks_dashboard_ninja.board'].browse(dashboard_id).write({ + 'ks_ai_explain_dash': False + }) + else: + self.env['ks_dashboard_ninja.board'].browse(dashboard_id).write({ + 'ks_ai_explain_dash': True + }) + return True + else: + raise ValidationError(_("AI Responds with the wrong analysis. Please try again ")) + elif ks_rest_items: + if self.env.context.get('explain_items_with_ai', False): + self.env['ks_dashboard_ninja.board'].browse(dashboard_id).write({ + 'ks_ai_explain_dash': False + }) + else: + self.env['ks_dashboard_ninja.board'].browse(dashboard_id).write({ + 'ks_ai_explain_dash': True + }) + return True + else: + return False + + def get_ai_explain(self, item_id): + res = self.env['ks_dashboard_ninja.item'].browse(item_id).ks_ai_analysis + return res + + @api.model + def ks_switch_default_dashboard(self, dashboard_id): + self.env['ks_dashboard_ninja.board'].browse(dashboard_id).write({ + 'ks_ai_explain_dash': False + }) + return True + + @api.model + def ks_generatetext_to_speech(self, item_id): + if (item_id): + try: + ks_text = self.env['ks_dashboard_ninja.item'].browse(item_id).ks_ai_analysis + if ks_text: + language = 'en' + ks_myobj = gTTS(text=ks_text, lang=language, slow=False) + audio_data = io.BytesIO() + ks_myobj.write_to_fp(audio_data) + audio_data.seek(0) + binary_data = audio_data.read() + wav_file = base64.b64encode(binary_data).decode('UTF-8') + data = {"snd": wav_file} + return json.dumps(data) + else: + return False + except Exception as e: + _logger.error(e) + raise ValidationError(_("Some problem in audio generation.")) + + else: + return False + + @api.model + def ks_gen_chat_res(self,**kwargs): + ks_question = kwargs.get('ks_question') + url = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.url') + "/api/v1/get_sql_query" + data = { + "question": ks_question, + } + try: + ks_response = requests.post(url,data=data) + if (ks_response.status_code == 200): + ks_response = json.loads(ks_response.text)['response']['Query'] + return self.ks_gen_dataframe(ks_response,ks_question) + else: + return False + except Exception as e: + _logger.error(e) + return False + + + + def ks_gen_dataframe(self,ks_query,question): + host = config.get('db_host', False) + user = quote(config.get('db_user', False)) + port = config.get('db_port', False) or 5432 + password = quote(config.get('db_password', False)) + db = config.get('db_name', False) or self.env.cr.dbname + if not all([host, user, port, password, db]): + return False + else: + sql_uri = f"postgresql+psycopg2://{user}:{password}@{host}:{port}/{db}" + ks_fixed_url = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.url') + "/api/v1/get_fixed_query" + try: + df = pd.read_sql(ks_query, sql_uri) + except Exception as e: + ks_query_data = { + 'query':ks_query, + 'error':e + } + fixed_query = requests.post(ks_fixed_url, data=ks_query_data) + if fixed_query.status_code == 200: + ks_corrected_query = fixed_query.text + df = pd.read_sql(ks_corrected_query, sql_uri) + else: + return False + if any(df.dtypes == 'datetime64[ns]'): + datetime_columns = [col for col in df.columns if df[col].dtype == 'datetime64[ns]'] + df[datetime_columns] = df[datetime_columns].astype(str) + + # Convert DataFrame to JSON + if len(df) >= 100: + df = df.head(100) + partial_data = True + + df_json = df.to_json(orient='records') + + ans = "As dataframe having more data to analyse we are not showing dataframe summary" + # Generate answer + if len(df) < 13: + ks_ans_url = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.url') + "/api/v1/get_answer" + ks_ans_data = {'df':df.to_dict(orient='records'),'question':question} + ans = requests.post(ks_ans_url, json = ks_ans_data) + if ans.status_code == 200: + ans = ans.text + response_json = { + "Dataframe": df_json, + "Answer": ans, + } + else: + return False + else: + response_json = { + "Dataframe": df_json, + "Answer": ans, + } + return response_json diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_ai_whole_dashboard.py b/third_party_addons/ks_dashboard_ninja/models/ks_ai_whole_dashboard.py new file mode 100644 index 000000000..9b04503dd --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_ai_whole_dashboard.py @@ -0,0 +1,90 @@ +import json +import logging + +import requests +from odoo.exceptions import ValidationError + +from odoo import fields, models, _ + +_logger = logging.getLogger(__name__) + + +class KsAIDashboardninja(models.TransientModel): + _name = 'ks_dashboard_ninja.ai_dashboard' + _description = 'AI Dashboard' + + ks_import_model_id = fields.Many2one('ir.model', string='Model', + domain="[('access_ids','!=',False),('transient','=',False)," + "('model','not ilike','base_import%'),('model','not ilike','ir.%')," + "('model','not ilike','web_editor.%'),('model','not ilike','web_tour.%')," + "('model','!=','mail.thread'),('model','not ilike','ks_dash%'),('model','not ilike','ks_to%')]", + help="Data source to fetch and read the data for the creation of dashboard items. ", required=True) + + ks_dash_name = fields.Char(string="Dashboard Name", required=True, char=35) + ks_menu_name = fields.Char(string="Menu Name", required=True, char=35) + ks_top_menu_id = fields.Many2one('ir.ui.menu', + domain="[('parent_id','=',False)]", + string="Show Under Menu", required=True, + default=lambda self: self.env['ir.ui.menu'].search( + [('name', '=', 'My Dashboards')])[0]) + ks_template = fields.Many2one('ks_dashboard_ninja.board_template', + default=lambda self: self.env.ref('ks_dashboard_ninja.ks_blank', + False), + string="Dashboard Template") + + def ks_do_action(self): + headers = {"Content-Type": "application/json", + "Accept": "application/json", + "Catch-Control": "no-cache", + } + + if self.ks_import_model_id: + ks_model_name = self.ks_import_model_id.model + ks_fields = self.env[ks_model_name].fields_get() + ks_filtered_fields = {key: val for key, val in ks_fields.items() if val['type'] not in ['many2many', 'one2many', 'binary'] and val['name'] != 'id' and val['name'] != 'sequence' and val['store'] == True} + ks_fields_name = {val['name']:val['type'] for val in ks_filtered_fields.values()} + question = ("columns: "+ f"{ks_fields_name}") + + api_key = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.dn_api_key') + url = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.url') + if api_key and url: + json_data = {'name': api_key, + 'question':question, + 'url':self.env['ir.config_parameter'].sudo().get_param('web.base.url'), + 'db_name':self.env.cr.dbname + } + url = url+"/api/v1/ks_dn_main_api" + ks_ai_response = requests.post(url, data=json_data) + if ks_ai_response.status_code == 200: + ks_ai_response = json.loads(ks_ai_response.text) + ks_create_record = self.env['ks_dashboard_ninja.board'].create({ + 'name': self.ks_dash_name, + 'ks_dashboard_menu_name': self.ks_menu_name, + 'ks_dashboard_default_template': self.ks_template.id, + 'ks_dashboard_top_menu_id': self.ks_top_menu_id.id, + }) + ks_dash_id = ks_create_record.id + + ks_result = self.env['ks_dashboard_ninja.item'].create_ai_dash(ks_ai_response, ks_dash_id, + ks_model_name) + + if (ks_result == "success"): + return { + 'type': 'ir.actions.client', + 'tag': 'reload', + } + else: + self.env['ks_dashboard_ninja.board'].browse(ks_dash_id).unlink() + raise ValidationError(_("Items didn't render, please try again!")) + else: + raise ValidationError(_("AI Responds with the following status:- %s") % ks_ai_response.text) + else: + raise ValidationError(_("Please enter URL and API Key in General Settings")) + else: + raise ValidationError(_("Please enter the Model")) + + + + diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_chat_channel.py b/third_party_addons/ks_dashboard_ninja/models/ks_chat_channel.py new file mode 100644 index 000000000..11fae1196 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_chat_channel.py @@ -0,0 +1,29 @@ +from odoo import models, fields, api, _ + + +class ChatChannel(models.Model): + _inherit = 'discuss.channel' + + ks_dashboard_board_id = fields.Many2one('ks_dashboard_ninja.board') + ks_dashboard_item_id = fields.Many2one('ks_dashboard_ninja.item') + + def ks_chat_wizard_channel_id(self, **kwargs): + item_id = kwargs.get('item_id') + dashboard_id = kwargs.get('dashboard_id') + item_name = kwargs.get('item_name') + dashboard_name = kwargs.get('dashboard_name') + + channel = self.search([('ks_dashboard_item_id', '=', item_id)], limit=1) + + if not channel: + users = self.env['res.users'].search([ + ('active', '=', True), ('groups_id', 'in', self.env.ref('base.group_user').id)]).mapped('partner_id.id') + + channel = self.sudo().create({ + 'name': f"{dashboard_name} - {item_name}", + 'ks_dashboard_board_id': dashboard_id, + 'ks_dashboard_item_id': item_id, + 'channel_member_ids': [(0, 0, {'partner_id': partner_id}) for partner_id in users] + }) + + return channel.id if channel else None diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_child_dashboard.py b/third_party_addons/ks_dashboard_ninja/models/ks_child_dashboard.py new file mode 100644 index 000000000..de9b2396a --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_child_dashboard.py @@ -0,0 +1,25 @@ +from odoo import models, fields, api, _ + + +class KsDashboardNinjaBoardItemAction(models.Model): + _name = 'ks_dashboard_ninja.child_board' + _description = 'Dashboard Ninja Child Board' + + name = fields.Char() + ks_dashboard_ninja_id = fields.Many2one("ks_dashboard_ninja.board", string="Select Dashboard") + ks_gridstack_config = fields.Char('Item Configurations') + # ks_board_active_user_ids = fields.Many2many('res.users') + ks_active = fields.Boolean("Is Selected") + ks_dashboard_menu_name = fields.Char(string="Menu Name", related='ks_dashboard_ninja_id.ks_dashboard_menu_name', store=True) + board_type = fields.Selection([('default', 'Default'), ('child', 'Child')]) + company_id = fields.Many2one('res.company', required=True, default=lambda self: self.env.company) + ks_computed_group_access = fields.Many2many('res.groups', compute='_compute_ks_computed_group_access', store=True) + + @api.depends('ks_dashboard_ninja_id.ks_dashboard_group_access') + def _compute_ks_computed_group_access(self): + for record in self: + record.ks_computed_group_access = record.ks_dashboard_ninja_id.ks_dashboard_group_access + + + def write(self,vals): + return super(KsDashboardNinjaBoardItemAction, self).write(vals) diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_country_bounds.py b/third_party_addons/ks_dashboard_ninja/models/ks_country_bounds.py new file mode 100644 index 000000000..e6aa3e930 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_country_bounds.py @@ -0,0 +1,182 @@ +country = { + 'AF': ('Afghanistan', (60.5284298033, 29.318572496, 75.1580277851, 38.4862816432)), + 'AO': ('Angola', (11.6400960629, -17.9306364885, 24.0799052263, -4.43802336998)), + 'AL': ('Albania', (19.3044861183, 39.624997667, 21.0200403175, 42.6882473822)), + 'AE': ('United Arab Emirates', (51.5795186705, 22.4969475367, 56.3968473651, 26.055464179)), + 'AR': ('Argentina', (-73.4154357571, -55.25, -53.628348965, -21.8323104794)), + 'AM': ('Armenia', (43.5827458026, 38.7412014837, 46.5057198423, 41.2481285671)), + 'AQ': ('Antarctica', (-180.0, -90.0, 180.0, -63.2706604895)), + 'TF': ('Fr. S. and Antarctic Lands', (68.72, -49.775, 70.56, -48.625)), + 'AU': ('Australia', (113.338953078, -43.6345972634, 153.569469029, -10.6681857235)), + 'AT': ('Austria', (9.47996951665, 46.4318173285, 16.9796667823, 49.0390742051)), + 'AZ': ('Azerbaijan', (44.7939896991, 38.2703775091, 50.3928210793, 41.8606751572)), + 'BI': ('Burundi', (29.0249263852, -4.49998341229, 30.752262811, -2.34848683025)), + 'BE': ('Belgium', (2.51357303225, 49.5294835476, 6.15665815596, 51.4750237087)), + 'BJ': ('Benin', (0.772335646171, 6.14215770103, 3.79711225751, 12.2356358912)), + 'BF': ('Burkina Faso', (-5.47056494793, 9.61083486576, 2.17710778159, 15.1161577418)), + 'BD': ('Bangladesh', (88.0844222351, 20.670883287, 92.6727209818, 26.4465255803)), + 'BG': ('Bulgaria', (22.3805257504, 41.2344859889, 28.5580814959, 44.2349230007)), + 'BS': ('Bahamas', (-78.98, 23.71, -77.0, 27.04)), + 'BA': ('Bosnia and Herz.', (15.7500260759, 42.65, 19.59976, 45.2337767604)), + 'BY': ('Belarus', (23.1994938494, 51.3195034857, 32.6936430193, 56.1691299506)), + 'BZ': ('Belize', (-89.2291216703, 15.8869375676, -88.1068129138, 18.4999822047)), + 'BO': ('Bolivia', (-69.5904237535, -22.8729187965, -57.4983711412, -9.76198780685)), + 'BR': ('Brazil', (-73.9872354804, -33.7683777809, -34.7299934555, 5.24448639569)), + 'BN': ('Brunei', (114.204016555, 4.007636827, 115.450710484, 5.44772980389)), + 'BT': ('Bhutan', (88.8142484883, 26.7194029811, 92.1037117859, 28.2964385035)), + 'BW': ('Botswana', (19.8954577979, -26.8285429827, 29.4321883481, -17.6618156877)), + 'CF': ('Central African Rep.', (14.4594071794, 2.2676396753, 27.3742261085, 11.1423951278)), + 'CA': ('Canada', (-140.99778, 41.6751050889, -52.6480987209, 83.23324)), + 'CH': ('Switzerland', (6.02260949059, 45.7769477403, 10.4427014502, 47.8308275417)), + 'CL': ('Chile', (-75.6443953112, -55.61183, -66.95992, -17.5800118954)), + 'CN': ('China', (73.6753792663, 18.197700914, 135.026311477, 53.4588044297)), + 'CI': ('Ivory Coast', (-8.60288021487, 4.33828847902, -2.56218950033, 10.5240607772)), + 'CM': ('Cameroon', (8.48881554529, 1.72767263428, 16.0128524106, 12.8593962671)), + 'CD': ('Congo (Kinshasa)', (12.1823368669, -13.2572266578, 31.1741492042, 5.25608775474)), + 'CG': ('Congo (Brazzaville)', (11.0937728207, -5.03798674888, 18.4530652198, 3.72819651938)), + 'CO': ('Colombia', (-78.9909352282, -4.29818694419, -66.8763258531, 12.4373031682)), + 'CR': ('Costa Rica', (-85.94172543, 8.22502798099, -82.5461962552, 11.2171192489)), + 'CU': ('Cuba', (-84.9749110583, 19.8554808619, -74.1780248685, 23.1886107447)), + 'CY': ('Cyprus', (32.2566671079, 34.5718694118, 34.0048808123, 35.1731247015)), + 'CZ': ('Czech Rep.', (12.2401111182, 48.5553052842, 18.8531441586, 51.1172677679)), + 'DE': ('Germany', (5.98865807458, 47.3024876979, 15.0169958839, 54.983104153)), + 'DJ': ('Djibouti', (41.66176, 10.9268785669, 43.3178524107, 12.6996385767)), + 'DK': ('Denmark', (8.08997684086, 54.8000145534, 12.6900061378, 57.730016588)), + 'DO': ('Dominican Rep.', (-71.9451120673, 17.598564358, -68.3179432848, 19.8849105901)), + 'DZ': ('Algeria', (-8.68439978681, 19.0573642034, 11.9995056495, 37.1183806422)), + 'EC': ('Ecuador', (-80.9677654691, -4.95912851321, -75.2337227037, 1.3809237736)), + 'EG': ('Egypt', (24.70007, 22.0, 36.86623, 31.58568)), + 'ER': ('Eritrea', (36.3231889178, 12.4554157577, 43.0812260272, 17.9983074)), + 'ES': ('Spain', (-9.39288367353, 35.946850084, 3.03948408368, 43.7483377142)), + 'EE': ('Estonia', (23.3397953631, 57.4745283067, 28.1316992531, 59.6110903998)), + 'ET': ('Ethiopia', (32.95418, 3.42206, 47.78942, 14.95943)), + 'FI': ('Finland', (20.6455928891, 59.846373196, 31.5160921567, 70.1641930203)), + 'FJ': ('Fiji', (-180.0, -18.28799, 180.0, -16.0208822567)), + 'FK': ('Falkland Is.', (-61.2, -52.3, -57.75, -51.1)), + 'FR': ('France', (-54.5247541978, 2.05338918702, 9.56001631027, 51.1485061713)), + 'GA': ('Gabon', (8.79799563969, -3.97882659263, 14.4254557634, 2.32675751384)), + 'GB': ('United Kingdom', (-7.57216793459, 49.959999905, 1.68153079591, 58.6350001085)), + 'GE': ('Georgia', (39.9550085793, 41.0644446885, 46.6379081561, 43.553104153)), + 'GH': ('Ghana', (-3.24437008301, 4.71046214438, 1.0601216976, 11.0983409693)), + 'GN': ('Guinea', (-15.1303112452, 7.3090373804, -7.83210038902, 12.5861829696)), + 'GM': ('Gambia', (-16.8415246241, 13.1302841252, -13.8449633448, 13.8764918075)), + 'GW': ('Guinea Bissau', (-16.6774519516, 11.0404116887, -13.7004760401, 12.6281700708)), + 'GQ': ('Eq. Guinea', (9.3056132341, 1.01011953369, 11.285078973, 2.28386607504)), + 'GR': ('Greece', (20.1500159034, 34.9199876979, 26.6041955909, 41.8269046087)), + 'GL': ('Greenland', (-73.297, 60.03676, -12.20855, 83.64513)), + 'GT': ('Guatemala', (-92.2292486234, 13.7353376327, -88.2250227526, 17.8193260767)), + 'GY': ('Guyana', (-61.4103029039, 1.26808828369, -56.5393857489, 8.36703481692)), + 'HN': ('Honduras', (-89.3533259753, 12.9846857772, -83.147219001, 16.0054057886)), + 'HR': ('Croatia', (13.6569755388, 42.47999136, 19.3904757016, 46.5037509222)), + 'HT': ('Haiti', (-74.4580336168, 18.0309927434, -71.6248732164, 19.9156839055)), + 'HU': ('Hungary', (16.2022982113, 45.7594811061, 22.710531447, 48.6238540716)), + 'ID': ('Indonesia', (95.2930261576, -10.3599874813, 141.03385176, 5.47982086834)), + 'IN': ('India', (68.1766451354, 7.96553477623, 97.4025614766, 35.4940095078)), + 'IE': ('Ireland', (-9.97708574059, 51.6693012559, -6.03298539878, 55.1316222195)), + 'IR': ('Iran', (44.1092252948, 25.0782370061, 63.3166317076, 39.7130026312)), + 'IQ': ('Iraq', (38.7923405291, 29.0990251735, 48.5679712258, 37.3852635768)), + 'IS': ('Iceland', (-24.3261840479, 63.4963829617, -13.609732225, 66.5267923041)), + 'IL': ('Israel', (34.2654333839, 29.5013261988, 35.8363969256, 33.2774264593)), + 'IT': ('Italy', (6.7499552751, 36.619987291, 18.4802470232, 47.1153931748)), + 'JM': ('Jamaica', (-78.3377192858, 17.7011162379, -76.1996585761, 18.5242184514)), + 'JO': ('Jordan', (34.9226025734, 29.1974946152, 39.1954683774, 33.3786864284)), + 'JP': ('Japan', (129.408463169, 31.0295791692, 145.543137242, 45.5514834662)), + 'KZ': ('Kazakhstan', (46.4664457538, 40.6623245306, 87.3599703308, 55.3852501491)), + 'KE': ('Kenya', (33.8935689697, -4.67677, 41.8550830926, 5.506)), + 'KG': ('Kyrgyzstan', (69.464886916, 39.2794632025, 80.2599902689, 43.2983393418)), + 'KH': ('Cambodia', (102.3480994, 10.4865436874, 107.614547968, 14.5705838078)), + 'KR': ('S. Korea', (126.117397903, 34.3900458847, 129.468304478, 38.6122429469)), + 'KW': ('Kuwait', (46.5687134133, 28.5260627304, 48.4160941913, 30.0590699326)), + 'LA': ('Laos', (100.115987583, 13.88109101, 107.564525181, 22.4647531194)), + 'LB': ('Lebanon', (35.1260526873, 33.0890400254, 36.6117501157, 34.6449140488)), + 'LR': ('Liberia', (-11.4387794662, 4.35575511313, -7.53971513511, 8.54105520267)), + 'LY': ('Libya', (9.31941084152, 19.58047, 25.16482, 33.1369957545)), + 'LK': ('Sri Lanka', (79.6951668639, 5.96836985923, 81.7879590189, 9.82407766361)), + 'LS': ('Lesotho', (26.9992619158, -30.6451058896, 29.3251664568, -28.6475017229)), + 'LT': ('Lithuania', (21.0558004086, 53.9057022162, 26.5882792498, 56.3725283881)), + 'LU': ('Luxembourg', (5.67405195478, 49.4426671413, 6.24275109216, 50.1280516628)), + 'LV': ('Latvia', (21.0558004086, 55.61510692, 28.1767094256, 57.9701569688)), + 'MA': ('Morocco', (-17.0204284327, 21.4207341578, -1.12455115397, 35.7599881048)), + 'MD': ('Moldova', (26.6193367856, 45.4882831895, 30.0246586443, 48.4671194525)), + 'MG': ('Madagascar', (43.2541870461, -25.6014344215, 50.4765368996, -12.0405567359)), + 'MX': ('Mexico', (-117.12776, 14.5388286402, -86.811982388, 32.72083)), + 'MK': ('Macedonia', (20.46315, 40.8427269557, 22.9523771502, 42.3202595078)), + 'ML': ('Mali', (-12.1707502914, 10.0963607854, 4.27020999514, 24.9745740829)), + 'MM': ('Myanmar', (92.3032344909, 9.93295990645, 101.180005324, 28.335945136)), + 'ME': ('Montenegro', (18.45, 41.87755, 20.3398, 43.52384)), + 'MN': ('Mongolia', (87.7512642761, 41.5974095729, 119.772823928, 52.0473660345)), + 'MZ': ('Mozambique', (30.1794812355, -26.7421916643, 40.7754752948, -10.3170960425)), + 'MR': ('Mauritania', (-17.0634232243, 14.6168342147, -4.92333736817, 27.3957441269)), + 'MW': ('Malawi', (32.6881653175, -16.8012997372, 35.7719047381, -9.23059905359)), + 'MY': ('Malaysia', (100.085756871, 0.773131415201, 119.181903925, 6.92805288332)), + 'NA': ('Namibia', (11.7341988461, -29.045461928, 25.0844433937, -16.9413428687)), + 'NC': ('New Caledonia', (164.029605748, -22.3999760881, 167.120011428, -20.1056458473)), + 'NE': ('Niger', (0.295646396495, 11.6601671412, 15.9032466977, 23.4716684026)), + 'NG': ('Nigeria', (2.69170169436, 4.24059418377, 14.5771777686, 13.8659239771)), + 'NI': ('Nicaragua', (-87.6684934151, 10.7268390975, -83.147219001, 15.0162671981)), + 'NL': ('Netherlands', (3.31497114423, 50.803721015, 7.09205325687, 53.5104033474)), + 'NO': ('Norway', (4.99207807783, 58.0788841824, 31.29341841, 80.6571442736)), + 'NP': ('Nepal', (80.0884245137, 26.3978980576, 88.1748043151, 30.4227169866)), + 'NZ': ('New Zealand', (166.509144322, -46.641235447, 178.517093541, -34.4506617165)), + 'OM': ('Oman', (52.0000098, 16.6510511337, 59.8080603372, 26.3959343531)), + 'PK': ('Pakistan', (60.8742484882, 23.6919650335, 77.8374507995, 37.1330309108)), + 'PA': ('Panama', (-82.9657830472, 7.2205414901, -77.2425664944, 9.61161001224)), + 'PE': ('Peru', (-81.4109425524, -18.3479753557, -68.6650797187, -0.0572054988649)), + 'PH': ('Philippines', (117.17427453, 5.58100332277, 126.537423944, 18.5052273625)), + 'PG': ('Papua New Guinea', (141.000210403, -10.6524760881, 156.019965448, -2.50000212973)), + 'PL': ('Poland', (14.0745211117, 49.0273953314, 24.0299857927, 54.8515359564)), + 'PR': ('Puerto Rico', (-67.2424275377, 17.946553453, -65.5910037909, 18.5206011011)), + 'KP': ('N. Korea', (124.265624628, 37.669070543, 130.780007359, 42.9853868678)), + 'PT': ('Portugal', (-9.52657060387, 36.838268541, -6.3890876937, 42.280468655)), + 'PY': ('Paraguay', (-62.6850571357, -27.5484990374, -54.2929595608, -19.3427466773)), + 'QA': ('Qatar', (50.7439107603, 24.5563308782, 51.6067004738, 26.1145820175)), + 'RO': ('Romania', (20.2201924985, 43.6884447292, 29.62654341, 48.2208812526)), + 'RU': ('Russia', (-180.0, 41.151416124, 180.0, 81.2504)), + 'RW': ('Rwanda', (29.0249263852, -2.91785776125, 30.8161348813, -1.13465911215)), + 'SA': ('Saudi Arabia', (34.6323360532, 16.3478913436, 55.6666593769, 32.161008816)), + 'SD': ('Sudan', (21.93681, 8.61972971293, 38.4100899595, 22.0)), + 'SS': ('S. Sudan', (23.8869795809, 3.50917, 35.2980071182, 12.2480077571)), + 'SN': ('Senegal', (-17.6250426905, 12.332089952, -11.4678991358, 16.5982636581)), + 'SB': ('Solomon Is.', (156.491357864, -10.8263672828, 162.398645868, -6.59933847415)), + 'SL': ('Sierra Leone', (-13.2465502588, 6.78591685631, -10.2300935531, 10.0469839543)), + 'SV': ('El Salvador', (-90.0955545723, 13.1490168319, -87.7235029772, 14.4241327987)), + 'SO': ('Somalia', (40.98105, -1.68325, 51.13387, 12.02464)), + 'RS': ('Serbia', (18.82982, 42.2452243971, 22.9860185076, 46.1717298447)), + 'SR': ('Suriname', (-58.0446943834, 1.81766714112, -53.9580446031, 6.0252914494)), + 'SK': ('Slovakia', (16.8799829444, 47.7584288601, 22.5581376482, 49.5715740017)), + 'SI': ('Slovenia', (13.6981099789, 45.4523163926, 16.5648083839, 46.8523859727)), + 'SE': ('Sweden', (11.0273686052, 55.3617373725, 23.9033785336, 69.1062472602)), + 'SZ': ('Swaziland', (30.6766085141, -27.2858794085, 32.0716654803, -25.660190525)), + 'SY': ('Syria', (35.7007979673, 32.312937527, 42.3495910988, 37.2298725449)), + 'TD': ('Chad', (13.5403935076, 7.42192454674, 23.88689, 23.40972)), + 'TG': ('Togo', (-0.0497847151599, 5.92883738853, 1.86524051271, 11.0186817489)), + 'TH': ('Thailand', (97.3758964376, 5.69138418215, 105.589038527, 20.4178496363)), + 'TJ': ('Tajikistan', (67.4422196796, 36.7381712916, 74.9800024759, 40.9602133245)), + 'TM': ('Turkmenistan', (52.5024597512, 35.2706639674, 66.5461503437, 42.7515510117)), + 'TL': ('East Timor', (124.968682489, -9.39317310958, 127.335928176, -8.27334482181)), + 'TT': ('Trinidad and Tobago', (-61.95, 10.0, -60.895, 10.89)), + 'TN': ('Tunisia', (7.52448164229, 30.3075560572, 11.4887874691, 37.3499944118)), + 'TR': ('Turkey', (26.0433512713, 35.8215347357, 44.7939896991, 42.1414848903)), + 'TW': ('Taiwan', (120.106188593, 21.9705713974, 121.951243931, 25.2954588893)), + 'TZ': ('Tanzania', (29.3399975929, -11.7209380022, 40.31659, -0.95)), + 'UG': ('Uganda', (29.5794661801, -1.44332244223, 35.03599, 4.24988494736)), + 'UA': ('Ukraine', (22.0856083513, 44.3614785833, 40.0807890155, 52.3350745713)), + 'UY': ('Uruguay', (-58.4270741441, -34.9526465797, -53.209588996, -30.1096863746)), + 'US': ('United States', (-171.791110603, 18.91619, -66.96466, 71.3577635769)), + 'UZ': ('Uzbekistan', (55.9289172707, 37.1449940049, 73.055417108, 45.5868043076)), + 'VE': ('Venezuela', (-73.3049515449, 0.724452215982, -59.7582848782, 12.1623070337)), + 'VN': ('Vietnam', (102.170435826, 8.59975962975, 109.33526981, 23.3520633001)), + 'VU': ('Vanuatu', (166.629136998, -16.5978496233, 167.844876744, -14.6264970842)), + 'PS': ('West Bank', (34.9274084816, 31.3534353704, 35.5456653175, 32.5325106878)), + 'YE': ('Yemen', (42.6048726743, 12.5859504257, 53.1085726255, 19.0000033635)), + 'ZA': ('South Africa', (16.3449768409, -34.8191663551, 32.830120477, -22.0913127581)), + 'ZM': ('Zambia', (21.887842645, -17.9612289364, 33.4856876971, -8.23825652429)), + 'ZW': ('Zimbabwe', (25.2642257016, -22.2716118303, 32.8498608742, -15.5077869605)), +} + + +def get_country_code(country_id): + if country_id in country.keys(): + return country.get(country_id) + else: + return {} diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_dashboard_filters.py b/third_party_addons/ks_dashboard_ninja/models/ks_dashboard_filters.py new file mode 100644 index 000000000..d1952c12c --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_dashboard_filters.py @@ -0,0 +1,89 @@ +from odoo import models, fields, api, _ +from odoo.exceptions import ValidationError +from odoo.tools.safe_eval import safe_eval +import json + + +class KsDashboardNinjaTemplate(models.Model): + _name = 'ks_dashboard_ninja.board_defined_filters' + _description = 'Dashboard Ninja Defined Filters' + + name = fields.Char('Filter Label') + ks_dashboard_board_id = fields.Many2one('ks_dashboard_ninja.board', string="Dashboard") + ks_model_id = fields.Many2one('ir.model', string='Model', + domain="[('access_ids','!=',False),('transient','=',False)," + "('model','not ilike','base_import%'),('model','not ilike','ir.%')," + "('model','not ilike','web_editor.%'),('model','not ilike','web_tour.%')," + "('model','!=','mail.thread'),('model','not ilike','ks_dash%'), ('model','not ilike','ks_to%')]", + help="Data source to fetch and read the data for the creation of dashboard items. ") + ks_domain = fields.Char(string="Domain", help="Define conditions for filter. ") + ks_domain_temp = fields.Char(string="Domain Substitute") + ks_model_name = fields.Char(related='ks_model_id.model', string="Model Name") + display_type = fields.Selection([ + ('line_section', "Section")], default=False, help="Technical field for UX purpose.") + sequence = fields.Integer(default=10, + help="Gives the sequence order when displaying a list of payment terms lines.") + ks_is_active = fields.Boolean(string="Active") + + @api.onchange('ks_domain') + def ks_domain_onchange(self): + for rec in self: + if rec.ks_model_id: + try: + ks_domain = rec.ks_domain + if ks_domain and "%UID" in ks_domain: + ks_domain = ks_domain.replace('"%UID"', str(self.env.user.id)) + if ks_domain and "%MYCOMPANY" in ks_domain: + ks_domain = ks_domain.replace('"%MYCOMPANY"', str(self.env.company.id)) + self.env[rec.ks_model_id.model].search_count(safe_eval(ks_domain)) + except Exception as e: + raise ValidationError(_("Something went wrong . Possibly it is due to wrong input type for domain")) + + @api.constrains('ks_domain', 'ks_model_id') + def ks_domain_check(self): + for rec in self: + if rec.ks_model_id and not rec.ks_domain: + raise ValidationError(_("Domain can not be empty")) + + + +class KsDashboardNinjaTemplate(models.Model): + _name = 'ks_dashboard_ninja.board_custom_filters' + _description = 'Dashboard Ninja Custom Filters' + + name = fields.Char("Filter Label") + ks_dashboard_board_id = fields.Many2one('ks_dashboard_ninja.board', string="Dashboard") + ks_model_id = fields.Many2one('ir.model', string='Model', + domain="[('access_ids','!=',False),('transient','=',False)," + "('model','not ilike','base_import%'),('model','not ilike','ir.%')," + "('model','not ilike','web_editor.%'),('model','not ilike','web_tour.%')," + "('model','!=','mail.thread'),('model','not ilike','ks_dash%'), ('model','not ilike','ks_to%')]", + help="Data source to fetch and read the data for the creation of dashboard items. ") + ks_domain_field_id = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id)," + "('name','!=','id'),('store','=',True)," + "('ttype', 'in', ['boolean', 'char', " + "'date', 'datetime', 'float', 'integer', 'html', 'many2many', " + "'many2one', 'monetary', 'one2many', 'text', 'selection'])]", + string="Domain Field") + + @api.onchange('ks_model_id') + def on_change_ks_model_id(self): + self.ks_domain_field_id = False + + +class KsDashboardNinjaTemplateFilters(models.Model): + _name = 'ks_dashboard_ninja.favourite_filters' + _description = 'Dashboard Ninja Favourite Filters' + + name = fields.Char("Filter Label") + ks_dashboard_board_id = fields.Many2one('ks_dashboard_ninja.board', string="Dashboard") + ks_filter = fields.Char("Filter") + ks_access_id = fields.Integer("Access Id") + ks_filter_type = fields.Char(default='favourite') + + _sql_constraints = [ + ('name_uniq', 'UNIQUE (name)', 'The name of the filter must be unique!'), + ] + + diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py b/third_party_addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py new file mode 100644 index 000000000..1d86594b9 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_dashboard_ninja.py @@ -0,0 +1,1515 @@ +# -*- coding: utf-8 -*- + +from odoo import models, fields, api, _ +from odoo.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT +from odoo.exceptions import ValidationError +import datetime +from base64 import encodebytes +from odoo.tools.image import image_data_uri +import json +from odoo.addons.ks_dashboard_ninja.common_lib.ks_date_filter_selections import ks_get_date, ks_convert_into_local, \ + ks_convert_into_utc +from odoo.tools.safe_eval import safe_eval +import locale +from dateutil.parser import parse +from odoo.tools.misc import file_open + + + +class KsDashboardNinjaBoard(models.Model): + _name = 'ks_dashboard_ninja.board' + _description = 'Dashboard Ninja' + + name = fields.Char(string="Dashboard Name", required=True, size=35) + ks_dashboard_items_ids = fields.One2many('ks_dashboard_ninja.item', 'ks_dashboard_ninja_board_id', + string='Dashboard Items') + ks_dashboard_menu_name = fields.Char(string="Menu Name") + ks_dashboard_top_menu_id = fields.Many2one('ir.ui.menu', + domain="['|',('action','=',False),('parent_id','=',False)]", + string="Show Under Menu", + default=lambda self: self.env.ref('ks_dashboard_ninja.dashboards_menu_root',False)) + ks_dashboard_client_action_id = fields.Many2one('ir.actions.client') + ks_dashboard_menu_id = fields.Many2one('ir.ui.menu') + ks_dashboard_state = fields.Char() + ks_dashboard_active = fields.Boolean(string="Active", default=True) + ks_dashboard_group_access = fields.Many2many('res.groups', string="Group Access") + ks_dashboard_favourite_filters_ids = fields.One2many('ks_dashboard_ninja.favourite_filters', + 'ks_dashboard_board_id', string="Dashboard Favourite Filters") + + # DateFilter Fields + ks_dashboard_start_date = fields.Datetime(string="Start Date") + ks_dashboard_end_date = fields.Datetime(string="End Date") + ks_default_end_time = fields.Boolean(string="Default End Time") + ks_date_filter_selection = fields.Selection([ + ('l_none', 'All Time'), + ('l_day', 'Today'), + ('t_week', 'This Week'), + ('t_month', 'This Month'), + ('t_quarter', 'This Quarter'), + ('t_year', 'This Year'), + ('td_week', 'Week to Date'), + ('td_month', 'Month to Date'), + ('td_quarter', 'Quarter to Date'), + ('td_year', 'Year to Date'), + ('n_day', 'Next Day'), + ('n_week', 'Next Week'), + ('n_month', 'Next Month'), + ('n_quarter', 'Next Quarter'), + ('n_year', 'Next Year'), + ('ls_day', 'Last Day'), + ('ls_week', 'Last Week'), + ('ls_month', 'Last Month'), + ('ls_quarter', 'Last Quarter'), + ('ls_year', 'Last Year'), + ('l_week', 'Last 7 days'), + ('l_month', 'Last 30 days'), + ('l_quarter', 'Last 90 days'), + ('l_year', 'Last 365 days'), + ('ls_past_until_now', 'Past Till Now'), + ('ls_pastwithout_now', ' Past Excluding Today'), + ('n_future_starting_now', 'Future Starting Now'), + ('n_futurestarting_tomorrow', 'Future Starting Tomorrow'), + ('l_custom', 'Custom Filter'), + ], default='l_none', string="Default Date Filter") + + # for setting Global/Indian Format + ks_data_formatting = fields.Selection([ + ('global', 'Global'), + ('indian', 'Indian'), + ('exact', 'Exact') + ], string='Format') + + ks_gridstack_config = fields.Char('Item Configurations') + ks_dashboard_default_template = fields.Many2one('ks_dashboard_ninja.board_template', + default=lambda self: self.env.ref('ks_dashboard_ninja.ks_blank', + False), + string="Dashboard Template") + + ks_set_interval = fields.Selection([ + ('15000', '15 Seconds'), + ('30000', '30 Seconds'), + ('45000', '45 Seconds'), + ('60000', '1 minute'), + ('120000', '2 minute'), + ('300000', '5 minute'), + ('600000', '10 minute'), + ], string="Default Update Interval", help="Update Interval for new items only") + ks_dashboard_menu_sequence = fields.Integer(string="Menu Sequence", default=20, + help="Smallest sequence give high priority and Highest sequence give " + "low priority") + ks_child_dashboard_ids = fields.One2many('ks_dashboard_ninja.child_board', 'ks_dashboard_ninja_id') + ks_dashboard_defined_filters_ids = fields.One2many('ks_dashboard_ninja.board_defined_filters', + 'ks_dashboard_board_id', + string='Dashboard Predefined Filters') + ks_dashboard_custom_filters_ids = fields.One2many('ks_dashboard_ninja.board_custom_filters', + 'ks_dashboard_board_id', + string='Dashboard Custom Filters') + multi_layouts = fields.Boolean(string='Enable Multi-Dashboard Layouts', + help='Allow user to have multiple layouts of the same Dashboard') + + ks_ai_explain_dash = fields.Boolean(default=False); + is_bookmarked = fields.Boolean(default=False) + + def _default_dashboard_image(self): + return image_data_uri(encodebytes(file_open('ks_dashboard_ninja/static/images/dashboardOverview/defaultDashboard.png', 'rb').read())) + + ks_dn_dashboard_image = fields.Binary('Dashboard Image', default=_default_dashboard_image, attachment=False) + + @api.constrains('ks_dashboard_start_date', 'ks_dashboard_end_date') + def ks_date_validation(self): + for rec in self: + if rec.ks_dashboard_start_date > rec.ks_dashboard_end_date: + raise ValidationError(_('Start date must be less than end date')) + + @api.model_create_multi + def create(self, vals): + records = super(KsDashboardNinjaBoard, self).create(vals) + for record in records: + if record.ks_dashboard_top_menu_id and record.ks_dashboard_menu_name: + action_id = { + 'name': record.ks_dashboard_menu_name + " Action", + 'res_model': 'ks_dashboard_ninja.board', + 'tag': 'ks_dashboard_ninja', + 'params': {'ks_dashboard_id': record.id, 'ks_dashboard_name': record.ks_dashboard_menu_name}, + } + record.ks_dashboard_client_action_id = self.env['ir.actions.client'].sudo().create(action_id) + + group_ids = record.ks_dashboard_group_access.ids if record.ks_dashboard_group_access else [] + admin_group_id = self.env.ref('base.group_system').id + group_ids.append(admin_group_id) + group_ids = list(set(group_ids)) + + record.ks_dashboard_menu_id = self.env['ir.ui.menu'].sudo().create({ + 'name': record.ks_dashboard_menu_name, + 'active': record.ks_dashboard_active, + 'parent_id': record.ks_dashboard_top_menu_id.id, + 'action': "ir.actions.client," + str(record.ks_dashboard_client_action_id.id), + 'groups_id': group_ids, + 'sequence': record.ks_dashboard_menu_sequence + }) + + if record.ks_dashboard_default_template and record.ks_dashboard_default_template.ks_item_count: + ks_gridstack_config = {} + template_data = json.loads(record.ks_dashboard_default_template.ks_gridstack_config) + for item_data in template_data: + if record.ks_dashboard_default_template.ks_template_type == 'ks_custom': + dashboard_item = self.env['ks_dashboard_ninja.item'].browse(int(item_data)).copy( + {'ks_dashboard_ninja_board_id': record.id}) + ks_gridstack_config[dashboard_item.id] = template_data[item_data] + else: + dashboard_item = self.env.ref(item_data['item_id']).copy({'ks_dashboard_ninja_board_id': record.id}) + ks_gridstack_config[dashboard_item.id] = item_data['data'] + record.ks_gridstack_config = json.dumps(ks_gridstack_config) + return records + + @api.onchange('ks_date_filter_selection') + def ks_date_filter_selection_onchange(self): + for rec in self: + if rec.ks_date_filter_selection and rec.ks_date_filter_selection != 'l_custom': + rec.ks_dashboard_start_date = False + rec.ks_dashboard_end_date = False + + + def write(self, vals): + if vals.get('ks_date_filter_selection', False) and vals.get('ks_date_filter_selection') != 'l_custom': + vals.update({ + 'ks_dashboard_start_date': False, + 'ks_dashboard_end_date': False + + }) + record = super(KsDashboardNinjaBoard, self).write(vals) + for rec in self: + if 'ks_dashboard_menu_name' in vals: + if self.env.ref('ks_dashboard_ninja.ks_my_default_dashboard_board') and self.env.ref( + 'ks_dashboard_ninja.ks_my_default_dashboard_board').sudo().id == rec.id: + if self.env.ref('ks_dashboard_ninja.board_menu_root', False): + self.env.ref('ks_dashboard_ninja.board_menu_root').sudo().name = vals['ks_dashboard_menu_name'] + else: + rec.ks_dashboard_menu_id.sudo().name = vals['ks_dashboard_menu_name'] + if 'ks_dashboard_group_access' in vals: + if self.env.ref('ks_dashboard_ninja.ks_my_default_dashboard_board').id == rec.id: + if self.env.ref('ks_dashboard_ninja.board_menu_root', False): + self.env.ref('ks_dashboard_ninja.board_menu_root').groups_id = vals['ks_dashboard_group_access'] + else: + rec.ks_dashboard_menu_id.sudo().groups_id = vals['ks_dashboard_group_access'] + if 'ks_dashboard_active' in vals and rec.ks_dashboard_menu_id: + rec.ks_dashboard_menu_id.sudo().active = vals['ks_dashboard_active'] + + if 'ks_dashboard_top_menu_id' in vals: + rec.ks_dashboard_menu_id.write( + {'parent_id': vals['ks_dashboard_top_menu_id']} + ) + + if 'ks_dashboard_menu_sequence' in vals: + rec.ks_dashboard_menu_id.sudo().sequence = vals['ks_dashboard_menu_sequence'] + if 'name' in vals: + rec.ks_dashboard_client_action_id.sudo().name = vals['name'] + + return record + + def unlink(self): + if self.env.ref('ks_dashboard_ninja.ks_my_default_dashboard_board').id in self.ids: + raise ValidationError(_("Default Dashboard can't be deleted.")) + else: + for rec in self: + rec.ks_dashboard_client_action_id.sudo().unlink() + rec.ks_child_dashboard_ids.unlink() + rec.ks_dashboard_menu_id.sudo().unlink() + rec.ks_dashboard_items_ids.unlink() + res = super(KsDashboardNinjaBoard, self).unlink() + return res + + def ks_update_menu_id_old_db(self): + ks_records = self.search([('name','in',['Template1 Dashboard','Template2 Dashboard','Template3 Dashboard','My Dashboard'])]) + ks_menu_id = self.env.ref('ks_dashboard_ninja.dashboards_menu_root').id + for rec in ks_records: + if (rec.name == "My Dashboard" and rec.ks_dashboard_state == 'Locked') or(rec.name in ['Template1 Dashboard','Template2 Dashboard','Template3 Dashboard'] and rec.ks_dashboard_top_menu_id.name == 'My Dashboard'): + rec.ks_dashboard_top_menu_id = ks_menu_id + if not rec.ks_dashboard_menu_id: + action_id = { + 'name': rec.ks_dashboard_menu_name + " Action", + 'res_model': 'ks_dashboard_ninja.board', + 'tag': 'ks_dashboard_ninja', + 'params': {'ks_dashboard_id': rec.id, 'ks_dashboard_name': rec.ks_dashboard_menu_name}, + } + rec.ks_dashboard_client_action_id = self.env['ir.actions.client'].sudo().create(action_id) + + rec.ks_dashboard_menu_id = self.env['ir.ui.menu'].sudo().create({ + 'name': rec.ks_dashboard_menu_name, + 'active': rec.ks_dashboard_active, + 'parent_id': rec.ks_dashboard_top_menu_id.id, + 'action': "ir.actions.client," + str(rec.ks_dashboard_client_action_id.id), + 'groups_id': rec.ks_dashboard_group_access.ids if rec.ks_dashboard_group_access else False, + 'sequence': rec.ks_dashboard_menu_sequence if rec.ks_dashboard_menu_sequence else 10 + }) + + return True + + def update_group_access_of_menus(self): + all_dashboards = self.env['ks_dashboard_ninja.board'].search([]) + admin_group_id = self.env.ref('base.group_system').id + for dashboard in all_dashboards: + current_groups = dashboard['ks_dashboard_group_access'] + current_groups.ids.append(admin_group_id) + updated_groups = list(set(current_groups)) + current_groups = updated_groups + + + def ks_get_grid_config(self): + default_grid_id = self.env['ks_dashboard_ninja.child_board'].search( + [['id', 'in', self.ks_child_dashboard_ids.ids], ['company_id', '=', self.env.company.id], + ['board_type', '=', 'default']]) + + if not default_grid_id: + default_grid_id = self.env['ks_dashboard_ninja.child_board'].create({ + "ks_gridstack_config": self.ks_gridstack_config, + "ks_dashboard_ninja_id": self.id, + "name": "Default Board Layout", + "company_id": self.env.company.id, + "board_type": "default", + }) + + return default_grid_id + + @api.model + def ks_fetch_dashboard_data(self, ks_dashboard_id, ks_item_domain=False): + """ + Return Dictionary of Dashboard Data. + :param ks_dashboard_id: Integer + :param ks_item_domain: List[List] + :return: dict + """ + + ks_dn_active_ids = [] + if self._context.get('ks_dn_active_ids'): + ks_dn_active_ids = self._context.get('ks_dn_active_ids') + + ks_dn_active_ids.append(ks_dashboard_id) + self = self.with_context( + ks_dn_active_ids=ks_dn_active_ids, + ) + + has_group_ks_dashboard_manager = self.env.user.has_group('ks_dashboard_ninja.ks_dashboard_ninja_group_manager') + ks_dashboard_rec = self.browse(ks_dashboard_id) + zooming_enabled = self.env['ir.config_parameter'].sudo().get_param('ks_dashboard_ninja.enable_chart_zoom') + dashboard_data = { + 'name': ks_dashboard_rec.name, + 'multi_layouts': ks_dashboard_rec.multi_layouts, + 'ks_company_id': self._context.get('allowed_company_ids')[0], + 'ks_dashboard_manager': has_group_ks_dashboard_manager, + 'ks_dashboard_list': self.search_read([], ['id', 'name']), + 'ks_dashboard_start_date': self._context.get('ksDateFilterStartDate', False) or self.browse( + ks_dashboard_id).ks_dashboard_start_date, + 'ks_dashboard_end_date': self._context.get('ksDateFilterEndDate', False) or self.browse( + ks_dashboard_id).ks_dashboard_end_date, + 'ks_date_filter_selection': self._context.get('ksDateFilterSelection', False) or self.browse( + ks_dashboard_id).ks_date_filter_selection, + 'ks_gridstack_config': "{}", + 'ks_set_interval': ks_dashboard_rec.ks_set_interval, + 'ks_data_formatting': ks_dashboard_rec.ks_data_formatting, + 'ks_dashboard_items_ids': ks_dashboard_rec.ks_dashboard_items_ids.ids, + 'ks_item_data': {}, + 'ks_child_boards': False, + 'ks_selected_board_id': False, + 'ks_dashboard_domain_data': ks_dashboard_rec.ks_prepare_dashboard_domain(), + 'ks_dashboard_pre_domain_filter': ks_dashboard_rec.ks_prepare_dashboard_pre_domain(), + 'ks_dashboard_custom_domain_filter': ks_dashboard_rec.ks_prepare_dashboard_custom_domain(), + 'ks_dashboard_favourite_filter': ks_dashboard_rec.ks_prepare_dashboard_favourite_filter(), + 'ks_item_model_relation': dict([(x['id'], [x['ks_model_name'], x['ks_model_name_2']]) for x in + ks_dashboard_rec.ks_dashboard_items_ids.read( + ['ks_model_name', 'ks_model_name_2'])]), + 'ks_model_item_relation': {}, + 'ks_ai_explain_dash':ks_dashboard_rec.ks_ai_explain_dash, + 'is_bookmarked': ks_dashboard_rec.is_bookmarked, + 'zooming_enabled': zooming_enabled + } + + default_grid_id = ks_dashboard_rec.ks_get_grid_config() + dashboard_data['ks_gridstack_config'] = default_grid_id[0].ks_gridstack_config + dashboard_data['ks_gridstack_config_id'] = default_grid_id[0].id + + if self.env['ks_dashboard_ninja.child_board'].search( + [['id', 'in', ks_dashboard_rec.ks_child_dashboard_ids.ids], ['company_id', '=', self.env.company.id], + ['board_type', '!=', 'default']], limit=1): + dashboard_data['ks_child_boards'] = { + 'ks_default': [ks_dashboard_rec.name, default_grid_id[0].ks_gridstack_config]} + selecred_rec = self.env['ks_dashboard_ninja.child_board'].search( + [['id', 'in', ks_dashboard_rec.ks_child_dashboard_ids.ids], ['ks_active', '=', True], + ['company_id', '=', self.env.company.id], ['board_type', '!=', 'default']], limit=1) + if selecred_rec: + dashboard_data['ks_selected_board_id'] = str(selecred_rec.id) + dashboard_data['ks_gridstack_config'] = selecred_rec.ks_gridstack_config + else: + dashboard_data['ks_selected_board_id'] = 'ks_default' + for rec in self.env['ks_dashboard_ninja.child_board'].search_read( + [['id', 'in', ks_dashboard_rec.ks_child_dashboard_ids.ids], + ['company_id', '=', self.env.company.id], ['board_type', '!=', 'default']], + ['name', 'ks_gridstack_config']): + dashboard_data['ks_child_boards'][str(rec['id'])] = [rec['name'], rec['ks_gridstack_config']] + ks_item_domain = ks_item_domain or [] + try: + items = self.ks_dashboard_items_ids.search( + [['ks_dashboard_ninja_board_id', '=', ks_dashboard_id]] + ks_item_domain).ids + except Exception as e: + items = self.ks_dashboard_items_ids.search( + [['ks_dashboard_ninja_board_id', '=', ks_dashboard_id]] + ks_item_domain).ids + dashboard_data['ks_dashboard_items_ids'] = items + return dashboard_data + + @api.model + def ks_fetch_item(self, item_list, ks_dashboard_id, params={}): + """ + :rtype: object + :param item_list: list of item ids. + :return: {'id':[item_data]} + """ + self = self.ks_set_date(ks_dashboard_id) + items = {} + item_model = self.env['ks_dashboard_ninja.item'] + for item_id in item_list: + item = self.ks_fetch_item_data(item_model.browse(item_id), params) + items[item['id']] = item + return items + + # fetching Item info (Divided to make function inherit easily) + def ks_fetch_item_data(self, rec, params={}): + """ + :rtype: object + :param item_id: item object + :return: object with formatted item data + """ + try: + ks_precision = self.sudo().env.ref('ks_dashboard_ninja.ks_dashboard_ninja_precision') + ks_precision_digits = ks_precision.digits + if ks_precision_digits < 0: + ks_precision_digits = 2 + if ks_precision_digits > 100: + ks_precision_digits = 2 + except Exception as e: + ks_precision_digits = 2 + + action = {} + item_domain1 = params.get('ks_domain_1', []) + item_domain2 = params.get('ks_domain_2', []) + + ks_action_name = [] + if rec.ks_action_lines: + for res in rec.ks_action_lines: + my_dict = {} + my_dict['id'] = res.id + my_dict['name'] = res.ks_action_item_name + my_dict['sequence'] = res.sequence + ks_action_name.append(my_dict) + ks_action_name.sort(key=lambda r: r['sequence']) + + if rec.ks_actions: + context = {} + try: + context = safe_eval(rec.ks_actions.context) + except Exception: + context = {} + + # Managing those views that have the access rights + ks_actions = rec.ks_actions.sudo() + action['name'] = ks_actions.name + action['type'] = ks_actions.type + action['res_model'] = ks_actions.res_model + action['views'] = ks_actions.views + action['view_mode'] = ks_actions.view_mode + action['search_view_id'] = ks_actions.search_view_id.id + action['context'] = context + action['target'] = 'current' + elif rec.ks_is_client_action and rec.ks_client_action: + clint_action = {} + try: + context = safe_eval(rec.ks_client_action.context) + except Exception: + context = {} + ks_client_action = rec.ks_client_action.sudo() + clint_action['name'] = ks_client_action.name + clint_action['type'] = ks_client_action.type + clint_action['res_model'] = ks_client_action.res_model + clint_action['xml_id'] = ks_client_action.xml_id + clint_action['tag'] = ks_client_action.tag + clint_action['binding_type'] = ks_client_action.binding_type + clint_action['params'] = ks_client_action.params + clint_action['target'] = 'current' + clint_action['context'] = context, + clint_action['report_id'] = context.get('report_id', False) + clint_action['resId'] = ks_client_action.id + context.update({ + 'resId': ks_client_action.id + }) + + clint_action['params'] = { + 'options': context, + 'props': {'resId': ks_client_action.id} + } + + + action = clint_action, + else: + action = False + ks_currency_symbol = False + ks_currency_position = False + if rec.ks_unit and rec.ks_unit_selection == 'monetary': + try: + ks_currency_symbol = self.env.user.company_id.currency_id.symbol + ks_currency_position = self.env.user.company_id.currency_id.position + except Exception as E: + ks_currency_symbol = False + ks_currency_position = False + + item = { + 'name': rec.name if rec.name else rec.ks_model_id.name if rec.ks_model_id else "Name", + 'ks_background_color': rec.ks_background_color, + 'ks_font_color': rec.ks_font_color, + 'ks_header_bg_color': rec.ks_header_bg_color, + # 'ks_domain': rec.ks_domain.replace('"%UID"', str( + # self.env.user.id)) if rec.ks_domain and "%UID" in rec.ks_domain else rec.ks_domain, + 'ks_domain': rec.ks_convert_into_proper_domain(rec.ks_domain, rec, item_domain1), + 'ks_dashboard_id': rec.ks_dashboard_ninja_board_id.id, + 'ks_icon': rec.ks_icon, + 'ks_model_id': rec.ks_model_id.id, + 'ks_model_name': rec.ks_model_name, + 'ks_model_display_name': rec.ks_model_id.name, + 'ks_record_count_type': rec.ks_record_count_type, + 'ks_record_count': rec._ksGetRecordCount(item_domain1), + 'id': rec.id, + 'ks_layout': rec.ks_layout, + 'ks_icon_select': rec.ks_icon_select, + 'ks_default_icon': rec.ks_default_icon, + 'ks_default_icon_color': rec.ks_default_icon_color, + # Pro Fields + 'ks_dashboard_item_type': rec.ks_dashboard_item_type, + 'ks_chart_item_color': rec.ks_chart_item_color, + 'ks_chart_groupby_type': rec.ks_chart_groupby_type, + 'ks_chart_measure_field': rec.ks_chart_measure_field.ids, + 'ks_chart_measure_field_2': rec.ks_chart_measure_field_2.ids, + 'ks_chart_relation_groupby': rec.ks_chart_relation_groupby.id, + 'ks_chart_relation_groupby_name': rec.ks_chart_relation_groupby.name, + 'ks_chart_date_groupby': rec.ks_chart_date_groupby, + 'ks_chart_sub_groupby_type': rec.ks_chart_sub_groupby_type, + 'ks_chart_relation_sub_groupby': rec.ks_chart_relation_sub_groupby.id, + 'ks_chart_relation_sub_groupby_name': rec.ks_chart_relation_sub_groupby.name, + 'ks_chart_date_sub_groupby': rec.ks_chart_date_sub_groupby, + 'ks_record_field': rec.ks_record_field.id if rec.ks_record_field else False, + 'ks_chart_data': rec._ks_get_chart_data(item_domain1), + 'ks_list_view_data': rec._ksGetListViewData(item_domain1), + 'ks_chart_data_count_type': rec.ks_chart_data_count_type, + 'ks_bar_chart_stacked': rec.ks_bar_chart_stacked, + 'ks_semi_circle_chart': rec.ks_semi_circle_chart, + 'ks_list_view_type': rec.ks_list_view_type, + 'ks_list_view_group_fields': rec.ks_list_view_group_fields.ids if rec.ks_list_view_group_fields else False, + 'ks_previous_period': rec.ks_previous_period, + 'ks_kpi_data': rec._ksGetKpiData(item_domain1, item_domain2), + 'ks_goal_enable': rec.ks_goal_enable, + 'ks_model_id_2': rec.ks_model_id_2.id, + 'ks_record_field_2': rec.ks_record_field_2.id, + 'ks_data_comparison': rec.ks_data_comparison, + 'ks_target_view': rec.ks_target_view, + 'ks_date_filter_selection': rec.ks_date_filter_selection, + 'ks_show_data_value': rec.ks_show_data_value, + 'ks_show_records': rec.ks_show_records, + 'ks_unit': rec.ks_unit, + 'ks_unit_selection': rec.ks_unit_selection, + 'ks_chart_unit': rec.ks_chart_unit, + # 'action_id': rec.ks_actions.id if rec.ks_actions else False, + 'sequence': 0, + 'max_sequnce': len(rec.ks_action_lines) if rec.ks_action_lines else False, + 'action': action, + 'ks_hide_legend': rec.ks_hide_legend, + 'ks_radial_legend': rec.ks_radial_legend, + 'ks_data_calculation_type': rec.ks_data_calculation_type, + 'ks_export_all_records': rec.ks_export_all_records, + 'ks_data_format': rec.ks_data_format, + 'ks_data_formatting': rec.ks_data_format, + 'ks_is_client_action': rec.ks_is_client_action, + 'ks_pagination_limit': rec.ks_pagination_limit, + 'ks_record_data_limit': rec.ks_record_data_limit, + 'ks_chart_cumulative_field': rec.ks_chart_cumulative_field.ids, + 'ks_chart_cumulative': rec.ks_chart_cumulative, + 'ks_chart_is_cumulative': rec.ks_chart_is_cumulative, + 'ks_button_color': rec.ks_button_color, + 'ks_to_do_data': rec._ksGetToDOData(), + 'ks_multiplier_active': rec.ks_multiplier_active, + 'ks_multiplier': rec.ks_multiplier, + 'ks_goal_liness': True if rec.ks_goal_lines else False, + 'ks_currency_symbol': ks_currency_symbol, + 'ks_currency_id': self.env.user.company_id.currency_id.id, + 'ks_currency_position': ks_currency_position, + 'ks_precision_digits': ks_precision_digits if ks_precision_digits else 2, + 'ks_data_label_type': rec.ks_data_label_type, + 'ks_as_of_now': rec.ks_as_of_now, + 'ks_info': rec.ks_info, + 'ks_company': rec.ks_company_id.name if rec.ks_company_id else False, + 'ks_scatter_measure_x_id': rec.ks_scatter_measure_x_id, + # 'ks_scatter_measure_y_id': rec.ks_scatter_measure_y_id, + 'ks_is_scatter_group': rec.ks_is_scatter_group, + 'ks_bounds': rec.ks_bounds, + 'ks_partners_map': rec.ks_partners_map, + 'ks_funnel_record_field': rec.ks_funnel_record_field, + 'ks_map_record_field': rec.ks_map_record_field, + 'ks_country_id': rec.ks_country_id.id, + 'ks_action_name': ks_action_name if ks_action_name else False, + 'ks_ai_analysis': rec.ks_ai_analysis, + 'ks_default_end_time': rec.ks_dashboard_ninja_board_id.ks_default_end_time, + 'item_data_source': rec.data_source + # 'ks_last_index':ks_last_index + # 'ks_id_name':','.join(ks_id_name) + } + return item + + def ks_set_date(self, ks_dashboard_id): + ks_dashboard_rec = self.browse(ks_dashboard_id) + if self._context.get('ksDateFilterSelection', False): + ks_date_filter_selection = self._context['ksDateFilterSelection'] + if ks_date_filter_selection == 'l_custom': + ks_start_dt_parse = parse(self._context['ksDateFilterStartDate']) + ks_end_dt_parse = parse(self._context['ksDateFilterEndDate']) + self = self.with_context( + ksDateFilterStartDate=fields.datetime.strptime(ks_start_dt_parse.strftime("%Y-%m-%d %H:%M:%S"), + "%Y-%m-%d %H:%M:%S")) + self = self.with_context( + ksDateFilterEndDate=fields.datetime.strptime(ks_end_dt_parse.strftime("%Y-%m-%d %H:%M:%S"), + "%Y-%m-%d %H:%M:%S")) + self = self.with_context(ksIsDefultCustomDateFilter=False) + + else: + ks_date_filter_selection = ks_dashboard_rec.ks_date_filter_selection + self = self.with_context(ksDateFilterStartDate=ks_dashboard_rec.ks_dashboard_start_date) + self = self.with_context(ksDateFilterEndDate=ks_dashboard_rec.ks_dashboard_end_date) + self = self.with_context(ksDateFilterSelection=ks_date_filter_selection) + self = self.with_context(ksIsDefultCustomDateFilter=True) + + if ks_date_filter_selection not in ['l_custom', 'l_none']: + ks_date_data = ks_get_date(ks_date_filter_selection, self, 'datetime') + self = self.with_context(ksDateFilterStartDate=ks_date_data["selected_start_date"]) + self = self.with_context(ksDateFilterEndDate=ks_date_data["selected_end_date"]) + + return self + + @api.model + def ks_get_list_view_data_offset(self, ks_dashboard_item_id, offset, dashboard_id, params={}): + item_domain = params.get('ks_domain_1', []) + self = self.ks_set_date(dashboard_id) + item = self.ks_dashboard_items_ids.browse(ks_dashboard_item_id) + + return item.ks_get_next_offset(ks_dashboard_item_id, offset, item_domain) + + def fetch_dashboard_overview(self, **kwargs): + + ks_board_model = self.env['ks_dashboard_ninja.board'] + ks_board_item_model = self.env['ks_dashboard_ninja.item'] + dashboards = ks_board_model.search_read(domain=[], fields=['name', 'is_bookmarked', 'ks_dn_dashboard_image']) + bookmarked_dashboards = ks_board_model.search_count([('is_bookmarked', '=', True)]) + chart_count = 0 + map_count = ks_board_item_model.search_count([('ks_dashboard_item_type', '=', 'ks_map_view')]) + dashboards_info = {} + list_view_count = ks_board_item_model.search_count( + [('ks_dashboard_item_type', '=', 'ks_list_view'), ('ks_dashboard_ninja_board_id', '!=', False)]) + chart_list = ['ks_bar_chart', 'ks_horizontalBar_chart', 'ks_line_chart', 'ks_area_chart', 'ks_pie_chart', + 'ks_doughnut_chart', + 'ks_polarArea_chart', 'ks_radialBar_chart', 'ks_scatter_chart', 'ks_funnel_chart', + 'ks_bullet_chart', 'ks_flower_view', 'ks_radar_view'] + + for dashboard in dashboards: + charts = ks_board_item_model.search_count( + [('ks_dashboard_ninja_board_id', '=', dashboard['id']), ('ks_dashboard_item_type', 'in', chart_list)]) + chart_count += charts + dashboards_info[dashboard['id']] = { + 'chartCount': charts, + 'name': dashboard['name'], + 'id': dashboard['id'], + 'is_bookmarked': dashboard['is_bookmarked'], + 'image': dashboard['ks_dn_dashboard_image'], + } + + return { + 'overviewInfo': [len(dashboards), chart_count, map_count, bookmarked_dashboards, list_view_count], + 'dashboardsInfo': dashboards_info, + 'user_name': self.env.user.name, + 'isManager': self.env.user.has_group('ks_dashboard_ninja.ks_dashboard_ninja_group_manager') + } + + def update_bookmarks(self, *args): + self.ensure_one() + self.is_bookmarked = not self.is_bookmarked + return [self.env['ks_dashboard_ninja.board'].search_count([('is_bookmarked', '=', True)]), self.is_bookmarked] + + def ks_view_items_view(self): + self.ensure_one() + return { + 'name': _("Dashboard Items"), + 'res_model': 'ks_dashboard_ninja.item', + 'view_mode': 'tree,form', + 'view_type': 'form', + 'views': [(False, 'list'), (False, 'form')], + 'type': 'ir.actions.act_window', + 'domain': [('ks_dashboard_ninja_board_id', '!=', False)], + 'search_view_id': self.env.ref('ks_dashboard_ninja.ks_item_search_view').id, + 'context': { + 'search_default_ks_dashboard_ninja_board_id': self.id, + 'group_by': 'ks_dashboard_ninja_board_id', + }, + 'help': _('''

+ You can find all items related to Dashboard Here.

+ '''), + + } + + def ks_export_item(self, item_id): + return { + 'ks_file_format': 'ks_dashboard_ninja_item_export', + 'item': self.ks_export_item_data(self.ks_dashboard_items_ids.browse(int(item_id))) + } + + # fetching Item info (Divided to make function inherit easily) + def ks_export_item_data(self, rec): + ks_timezone = self._context.get('tz') or self.env.user.tz + ks_chart_measure_field = [] + ks_chart_measure_field_2 = [] + if rec.ks_many2many_field_ordering: + ks_many2many_field_ordering = json.loads(rec.ks_many2many_field_ordering) + else: + ks_many2many_field_ordering = {} + if ks_many2many_field_ordering.get('ks_list_view_fields', False): + ks_list_view_fields_list = self.env['ir.model.fields'].search([('id', 'in', + ks_many2many_field_ordering.get('ks_list_view_fields', False))]) + if ks_many2many_field_ordering.get('ks_list_view_group_fields', False): + ks_list_view_group_fields_list = self.env['ir.model.fields'].search([('id', 'in', + ks_many2many_field_ordering.get('ks_list_view_group_fields', False))]) + if ks_many2many_field_ordering.get('ks_chart_measure_field', False): + ks_chart_measure_field_list = self.env['ir.model.fields'].search([('id', 'in', + ks_many2many_field_ordering.get('ks_chart_measure_field', False))]) + if ks_many2many_field_ordering.get('ks_chart_measure_field_2', False): + ks_chart_measure_field_2_list = self.env['ir.model.fields'].search([('id', 'in', + ks_many2many_field_ordering.get('ks_chart_measure_field_2', False))]) + + try: + for res in ks_chart_measure_field_list: + ks_chart_measure_field.append(res.name) + except Exception as E: + ks_chart_measure_field = [] + try: + for res in ks_chart_measure_field_2_list: + ks_chart_measure_field_2.append(res.name) + except Exception as E: + ks_chart_measure_field_2 = [] + ks_multiplier_fields = [] + ks_multiplier_value = [] + if rec.ks_multiplier_lines: + for ress in rec.ks_multiplier_lines.ks_multiplier_fields: + ks_multiplier_fields.append(ress.name) + for ks_val in rec.ks_multiplier_lines: + ks_multiplier_value.append(ks_val.ks_multiplier_value) + + ks_list_view_group_fields = [] + try: + for res in ks_list_view_group_fields_list: + ks_list_view_group_fields.append(res.name) + except Exception as e: + ks_list_view_group_fields = [] + ks_goal_lines = [] + for res in rec.ks_goal_lines: + goal_line = { + 'ks_goal_date': datetime.datetime.strftime(res.ks_goal_date, "%Y-%m-%d"), + 'ks_goal_value': res.ks_goal_value, + } + ks_goal_lines.append(goal_line) + ks_dn_header_lines = [] + for res in rec.ks_dn_header_lines: + ks_dn_header_line = { + 'ks_to_do_header': res.ks_to_do_header + } + + if res.ks_to_do_description_lines: + ks_to_do_description_lines = [] + for ks_description_line in res.ks_to_do_description_lines: + description_line = { + 'ks_description': ks_description_line.ks_description, + 'ks_active': ks_description_line.ks_active, + } + ks_to_do_description_lines.append(description_line) + ks_dn_header_line[res.ks_to_do_header] = ks_to_do_description_lines + ks_dn_header_lines.append(ks_dn_header_line) + + ks_action_lines = [] + for res in rec.ks_action_lines: + action_line = { + 'ks_item_action_field': res.ks_item_action_field.name, + 'ks_item_action_date_groupby': res.ks_item_action_date_groupby, + 'ks_chart_type': res.ks_chart_type, + 'ks_sort_by_field': res.ks_sort_by_field.name, + 'ks_sort_by_order': res.ks_sort_by_order, + 'ks_record_limit': res.ks_record_limit, + 'sequence': res.sequence, + 'ks_action_item_name': res.ks_action_item_name + } + ks_action_lines.append(action_line) + ks_multiplier_lines = [] + for res in rec.ks_multiplier_lines: + ks_multiplier_line = { + 'ks_multiplier_fields': res.ks_multiplier_fields.id, + 'ks_multiplier_value': res.ks_multiplier_value, + 'ks_dashboard_item_id': rec.id, + 'ks_model_id': rec.ks_model_id.id + } + ks_multiplier_lines.append(ks_multiplier_line) + + ks_list_view_field = [] + try: + for res in ks_list_view_fields_list: + ks_list_view_field.append(res.name) + except Exception as e: + ks_list_view_field = [] + val = str(rec.id) + keys_data = {} + selecred_rec = self.env['ks_dashboard_ninja.child_board'].search( + [['id', 'in', rec.ks_dashboard_ninja_board_id.ks_child_dashboard_ids.ids], ['ks_active', '=', True], + ['company_id', '=', self.env.company.id]], limit=1) + if rec.ks_dashboard_ninja_board_id.ks_gridstack_config: + keys_data = json.loads(rec.ks_dashboard_ninja_board_id.ks_gridstack_config) + elif selecred_rec: + keys_data = json.loads(selecred_rec.ks_gridstack_config) + elif rec.ks_dashboard_ninja_board_id.ks_child_dashboard_ids[0].ks_gridstack_config: + keys_data = json.loads(rec.ks_dashboard_ninja_board_id.ks_child_dashboard_ids[0].ks_gridstack_config) + elif self._context.get('gridstack_config', False): + keys_data = self._context.get('gridstack_config', False) + else: + if rec.grid_corners: + keys_data = {rec.id: json.loads(rec.grid_corners.replace("\'", "\""))} + keys_list = keys_data.keys() + grid_corners = {} + if val in keys_list: + grid_corners = keys_data.get(str(val)) + + item = { + 'name': rec.name if rec.name else rec.ks_model_id.name if rec.ks_model_id else "Name", + 'ks_background_color': rec.ks_background_color, + 'ks_font_color': rec.ks_font_color, + 'ks_header_bg_color': rec.ks_header_bg_color, + 'ks_domain': rec.ks_domain, + 'ks_icon': str(rec.ks_icon) if rec.ks_icon else False, + 'ks_id': rec.id, + 'ks_model_id': rec.ks_model_name, + 'ks_record_count': rec.ks_record_count, + 'ks_layout': rec.ks_layout, + 'ks_icon_select': rec.ks_icon_select, + 'ks_default_icon': rec.ks_default_icon, + 'ks_default_icon_color': rec.ks_default_icon_color, + 'ks_record_count_type': rec.ks_record_count_type, + # Pro Fields + 'ks_dashboard_item_type': rec.ks_dashboard_item_type, + 'ks_chart_item_color': rec.ks_chart_item_color, + 'ks_chart_groupby_type': rec.ks_chart_groupby_type, + 'ks_chart_relation_groupby': rec.ks_chart_relation_groupby.name, + 'ks_chart_date_groupby': rec.ks_chart_date_groupby, + 'ks_record_field': rec.ks_record_field.name, + 'ks_chart_sub_groupby_type': rec.ks_chart_sub_groupby_type, + 'ks_chart_relation_sub_groupby': rec.ks_chart_relation_sub_groupby.name, + 'ks_chart_date_sub_groupby': rec.ks_chart_date_sub_groupby, + 'ks_chart_data_count_type': rec.ks_chart_data_count_type, + 'ks_chart_measure_field': ks_chart_measure_field, + 'ks_chart_measure_field_2': ks_chart_measure_field_2, + 'ks_list_view_fields': ks_list_view_field, + 'ks_list_view_group_fields': ks_list_view_group_fields, + 'ks_list_view_type': rec.ks_list_view_type, + 'ks_record_data_limit': rec.ks_record_data_limit, + 'ks_sort_by_order': rec.ks_sort_by_order, + 'ks_sort_by_field': rec.ks_sort_by_field.name, + 'ks_date_filter_field': rec.ks_date_filter_field.name, + 'ks_goal_enable': rec.ks_goal_enable, + 'ks_standard_goal_value': rec.ks_standard_goal_value, + 'ks_goal_liness': ks_goal_lines, + 'ks_date_filter_selection': rec.ks_date_filter_selection, + 'ks_item_start_date': rec.ks_item_start_date.strftime( + DEFAULT_SERVER_DATETIME_FORMAT) if rec.ks_item_start_date else False, + 'ks_item_end_date': rec.ks_item_end_date.strftime( + DEFAULT_SERVER_DATETIME_FORMAT) if rec.ks_item_end_date else False, + 'ks_date_filter_selection_2': rec.ks_date_filter_selection_2, + 'ks_item_start_date_2': rec.ks_item_start_date_2.strftime( + DEFAULT_SERVER_DATETIME_FORMAT) if rec.ks_item_start_date_2 else False, + 'ks_item_end_date_2': rec.ks_item_end_date_2.strftime( + DEFAULT_SERVER_DATETIME_FORMAT) if rec.ks_item_end_date_2 else False, + 'ks_previous_period': rec.ks_previous_period, + 'ks_target_view': rec.ks_target_view, + 'ks_data_comparison': rec.ks_data_comparison, + 'ks_record_count_type_2': rec.ks_record_count_type_2, + 'ks_record_field_2': rec.ks_record_field_2.name, + 'ks_model_id_2': rec.ks_model_id_2.model, + 'ks_date_filter_field_2': rec.ks_date_filter_field_2.name, + 'ks_action_liness': ks_action_lines, + 'ks_compare_period': rec.ks_compare_period, + 'ks_year_period': rec.ks_year_period, + 'ks_compare_period_2': rec.ks_compare_period_2, + 'ks_year_period_2': rec.ks_year_period_2, + 'ks_domain_2': rec.ks_domain_2, + 'ks_show_data_value': rec.ks_show_data_value, + 'ks_list_target_deviation_field': rec.ks_list_target_deviation_field.name, + 'ks_unit': rec.ks_unit, + 'ks_show_records': rec.ks_show_records, + 'ks_hide_legend': rec.ks_hide_legend, + 'ks_radial_legend': rec.ks_radial_legend, + 'ks_fill_temporal': rec.ks_fill_temporal, + 'ks_domain_extension': rec.ks_domain_extension, + 'ks_unit_selection': rec.ks_unit_selection, + 'ks_chart_unit': rec.ks_chart_unit, + 'ks_bar_chart_stacked': rec.ks_bar_chart_stacked, + 'ks_goal_bar_line': rec.ks_goal_bar_line, + 'ks_actions': rec.ks_actions.xml_id if rec.ks_actions else False, + 'ks_client_action': rec.ks_client_action.xml_id if rec.ks_client_action else False, + 'ks_is_client_action': rec.ks_is_client_action, + 'ks_export_all_records': rec.ks_export_all_records, + 'ks_record_data_limit_visibility': rec.ks_record_data_limit_visibility, + 'ks_data_format': rec.ks_data_format, + 'ks_pagination_limit': rec.ks_pagination_limit, + 'ks_chart_cumulative_field': rec.ks_chart_cumulative_field.ids, + 'ks_chart_cumulative': rec.ks_chart_cumulative, + 'ks_button_color': rec.ks_button_color, + 'ks_dn_header_line': ks_dn_header_lines, + 'ks_semi_circle_chart': rec.ks_semi_circle_chart, + 'ks_multiplier_active': rec.ks_multiplier_active, + 'ks_multiplier': rec.ks_multiplier, + 'ks_multiplier_lines': ks_multiplier_lines if ks_multiplier_lines else False, + 'ks_many2many_field_ordering': rec.ks_many2many_field_ordering, + 'ks_data_label_type': rec.ks_data_label_type, + 'ks_as_of_now': rec.ks_as_of_now, + 'ks_scatter_measure_x_id': rec.ks_chart_relation_groupby.name, + # 'ks_scatter_measure_y_id': ks_chart_measure_field, + 'ks_is_scatter_group': rec.ks_is_scatter_group, + 'ks_country_id': rec.ks_country_id.id, + 'ks_bounds': rec.ks_bounds, + 'ks_partners_map': rec.ks_partners_map, + + } + if grid_corners: + item.update({ + 'grid_corners': grid_corners, + }) + return item + + def ks_open_import(self, **kwargs): + action = self.env['ir.actions.act_window']._for_xml_id('ks_dashboard_ninja.ks_import_dashboard_action') + return action + + def ks_open_setting(self, **kwargs): + action = self.env['ir.actions.act_window']._for_xml_id('ks_dashboard_ninja.board_form_tree_action_window') + # action['res_id'] = self.id + # action['target'] = 'new' + # action['context'] = {'form_view_ref':'ks_dashboard_ninja.board_form'} + # action['view_mode']='form' + return action + + # def ks_delete_dashboard(self): + # if str(self.id) in self.ks_dashboard_default_template: + # raise ValidationError(_('You cannot delete any default template')) + # else: + # self.search([('id', '=', self.id)]).unlink() + # return { + # 'type': 'ir.actions.client', + # 'name': "My Dashboard", + # 'tag': 'dashboard_ninja', + # # 'id': {} + # } + def save_dashboard_image(self, *args, **kwargs): + self.ensure_one() + image = kwargs.get('image') + if image: + self.ks_dn_dashboard_image = image + + def ks_create_dashboard(self): + action = self.env['ir.actions.act_window']._for_xml_id('ks_dashboard_ninja.board_form_tree_action_window') + action['target'] = 'new' + return action + + def ks_import_item(self, dashboard_id, **kwargs): + try: + # ks_dashboard_data = json.loads(file) + file = kwargs.get('file', False) + ks_dashboard_file_read = json.loads(file) + except Exception: + raise ValidationError(_("This file is not supported")) + + if 'ks_file_format' in ks_dashboard_file_read and ks_dashboard_file_read[ + 'ks_file_format'] == 'ks_dashboard_ninja_item_export': + item = ks_dashboard_file_read['item'] + else: + raise ValidationError(_("Current Json File is not properly formatted according to Dashboard Ninja Model.")) + + item['ks_dashboard_ninja_board_id'] = int(dashboard_id) + item['ks_company_id'] = False + self.ks_create_item(item) + + return "Success" + + @api.model + def ks_dashboard_export(self, ks_dashboard_ids, **kwargs): + ks_dashboard_data = [] + ks_dashboard_export_data = {} + if kwargs.get('dashboard_id'): + ks_dashboard_ids = '['+str(ks_dashboard_ids)+']' + ks_dashboard_ids = json.loads(ks_dashboard_ids) + for ks_dashboard_id in ks_dashboard_ids: + dash = self.search([('id', '=', ks_dashboard_id)]) + selecred_rec = self.env['ks_dashboard_ninja.child_board'].search( + [['id', 'in', dash.ks_child_dashboard_ids.ids], ['ks_active', '=', True], + ['company_id', '=', self.env.company.id]], limit=1) + ks_dashboard_rec = self.browse(ks_dashboard_id) + if selecred_rec: + name = selecred_rec.name + grid_conf = selecred_rec.ks_gridstack_config + elif dash.ks_child_dashboard_ids: + name = dash.display_name + grid_conf = dash.ks_child_dashboard_ids[0].ks_gridstack_config + else: + name = dash.name + grid_conf = dash.ks_gridstack_config + dashboard_data = self.ks_prepare_export_data_vals(ks_dashboard_rec, grid_conf=grid_conf) + if selecred_rec: + dashboard_data['name'] = selecred_rec.name + dashboard_data['ks_gridstack_config'] = selecred_rec.ks_gridstack_config + elif len(ks_dashboard_rec.ks_child_dashboard_ids) > 1: + dashboard_data['name'] = ks_dashboard_rec.ks_child_dashboard_ids[0].name + dashboard_data['ks_gridstack_config'] = ks_dashboard_rec.ks_child_dashboard_ids[0].ks_gridstack_config + if dashboard_data['name'] == 'Default Board Layout': + dashboard_data['name'] = ks_dashboard_rec.ks_dashboard_menu_name + if len(ks_dashboard_rec.ks_dashboard_items_ids) < 1: + dashboard_data['ks_item_data'] = False + else: + items = [] + for rec in ks_dashboard_rec.ks_dashboard_items_ids: + item = self.ks_export_item_data(rec) + items.append(item) + + dashboard_data['ks_item_data'] = items + ks_dashboard_data.append(dashboard_data) + + ks_dashboard_export_data = { + 'ks_file_format': 'ks_dashboard_ninja_export_file', + 'ks_dashboard_data': ks_dashboard_data + } + return ks_dashboard_export_data + + def ks_prepare_export_data_vals(self, ks_dashboard_rec, grid_conf=None,): + dashboard_data = { + 'name': ks_dashboard_rec.name, + 'ks_dashboard_menu_name': ks_dashboard_rec.ks_dashboard_menu_name, + 'ks_gridstack_config': grid_conf if grid_conf else '{}', + 'ks_set_interval': ks_dashboard_rec.ks_set_interval, + 'ks_date_filter_selection': ks_dashboard_rec.ks_date_filter_selection, + 'ks_dashboard_start_date': ks_dashboard_rec.ks_dashboard_start_date, + 'ks_dashboard_end_date': ks_dashboard_rec.ks_dashboard_end_date, + 'ks_dashboard_top_menu_id': ks_dashboard_rec.ks_dashboard_top_menu_id.id, + 'ks_data_formatting': ks_dashboard_rec.ks_data_formatting, + } + return dashboard_data + + @api.model + def ks_import_dashboard(self, file, menu_id): + try: + # ks_dashboard_data = json.loads(file) + ks_dashboard_file_read = json.loads(file) + except Exception: + raise ValidationError(_("This file is not supported")) + + if 'ks_file_format' in ks_dashboard_file_read and ks_dashboard_file_read[ + 'ks_file_format'] == 'ks_dashboard_ninja_export_file': + ks_dashboard_data = ks_dashboard_file_read['ks_dashboard_data'] + for i in range(len(ks_dashboard_data)): + if 'ks_set_interval' in ks_dashboard_data[i].keys() and ks_dashboard_data[i].get('ks_item_data', False): + # del ks_dashboard_data[i]['ks_set_interval'] + for j in range(len(ks_dashboard_data[i].get('ks_item_data', False))): + if 'ks_update_items_data' in ks_dashboard_data[i].get('ks_item_data', False)[j].keys(): + del ks_dashboard_data[i].get('ks_item_data', False)[j]['ks_update_items_data'] + if 'ks_auto_update_type' in ks_dashboard_data[i].get('ks_item_data', False)[j].keys(): + del ks_dashboard_data[i].get('ks_item_data', False)[j]['ks_auto_update_type'] + if 'ks_show_live_pop_up' in ks_dashboard_data[i].get('ks_item_data', False)[j].keys(): + del ks_dashboard_data[i].get('ks_item_data', False)[j]['ks_show_live_pop_up'] + else: + raise ValidationError(_("Current Json File is not properly formatted according to Dashboard Ninja Model.")) + + ks_dashboard_key = ['name', 'ks_dashboard_menu_name', 'ks_gridstack_config'] + ks_dashboard_item_key = ['ks_model_id', 'ks_chart_measure_field', 'ks_list_view_fields', 'ks_record_field', + 'ks_chart_relation_groupby', 'ks_id'] + + # Fetching dashboard model info + for data in ks_dashboard_data: + if not all(key in data for key in ks_dashboard_key): + raise ValidationError( + _("Current Json File is not properly formatted according to Dashboard Ninja Model.")) + ks_dashboard_top_menu_id = data.get('ks_dashboard_top_menu_id', False) + if ks_dashboard_top_menu_id: + try: + self.env['ir.ui.menu'].browse(ks_dashboard_top_menu_id).name + ks_dashboard_top_menu_id = self.env['ir.ui.menu'].browse(ks_dashboard_top_menu_id) + except Exception: + ks_dashboard_top_menu_id = False + vals = self.ks_prepare_import_data_vals(data, menu_id) + # Creating Dashboard + dashboard_id = self.create(vals) + + if data['ks_gridstack_config']: + ks_gridstack_config = safe_eval(data['ks_gridstack_config']) + ks_grid_stack_config = {} + + item_ids = [] + item_new_ids = [] + ks_skiped = False + if data['ks_item_data']: + # Fetching dashboard item info + ks_skiped = 0 + for item in data['ks_item_data']: + item['ks_company_id'] = False + if not all(key in item for key in ks_dashboard_item_key): + raise ValidationError( + _("Current Json File is not properly formatted according to Dashboard Ninja Model.")) + + # Creating dashboard items + item['ks_dashboard_ninja_board_id'] = dashboard_id.id + item_ids.append(item['ks_id']) + del item['ks_id'] + + if 'ks_data_calculation_type' in item: + if item['ks_data_calculation_type'] == 'custom': + del item['ks_data_calculation_type'] + del item['ks_custom_query'] + del item['ks_xlabels'] + del item['ks_ylabels'] + del item['ks_list_view_layout'] + ks_item = self.ks_create_item(item) + item_new_ids.append(ks_item.id) + else: + ks_skiped += 1 + else: + ks_item = self.ks_create_item(item) + item_new_ids.append(ks_item.id) + + for id_index, id in enumerate(item_ids): + if data['ks_gridstack_config'] and str(id) in ks_gridstack_config: + ks_grid_stack_config[str(item_new_ids[id_index])] = ks_gridstack_config[str(id)] + # if id_index in item_new_ids: + + self.browse(dashboard_id.id).write({ + 'ks_gridstack_config': json.dumps(ks_grid_stack_config) + }) + + if ks_skiped: + return { + 'ks_skiped_items': ks_skiped, + } + + return "Success" + # separate function to make item for import + + def ks_prepare_import_data_vals(self, data, menu_id): + vals = { + 'name': data['name'], + 'ks_dashboard_menu_name': data['ks_dashboard_menu_name'], + 'ks_dashboard_top_menu_id': menu_id.id if menu_id else self.env.ref( + "ks_dashboard_ninja.board_menu_root").id, + 'ks_dashboard_active': True, + 'ks_gridstack_config': data['ks_gridstack_config'], + 'ks_dashboard_default_template': self.env.ref("ks_dashboard_ninja.ks_blank").id, + 'ks_dashboard_group_access': False, + 'ks_set_interval': data['ks_set_interval'], + 'ks_date_filter_selection': data['ks_date_filter_selection'], + 'ks_dashboard_start_date': data['ks_dashboard_start_date'], + 'ks_dashboard_end_date': data['ks_dashboard_end_date'], + } + return vals + + def ks_create_item(self, item): + model = self.env['ir.model'].search([('model', '=', item['ks_model_id'])]) + + if not model and not item['ks_dashboard_item_type'] == 'ks_to_do': + raise ValidationError(_( + "Please Install the Module which contains the following Model : %s " % item['ks_model_id'])) + + ks_model_name = item['ks_model_id'] + + ks_goal_lines = item['ks_goal_liness'].copy() if item.get('ks_goal_liness', False) else False + ks_action_lines = item['ks_action_liness'].copy() if item.get('ks_action_liness', False) else False + ks_multiplier_lines = item['ks_multiplier_lines'].copy() if item.get('ks_multiplier_lines', False) else False + ks_dn_header_line = item['ks_dn_header_line'].copy() if item.get('ks_dn_header_line', False) else False + + # Creating dashboard items + item = self.ks_prepare_item(item) + + if 'ks_goal_liness' in item: + del item['ks_goal_liness'] + if 'ks_id' in item: + del item['ks_id'] + if 'ks_action_liness' in item: + del item['ks_action_liness'] + if 'ks_icon' in item: + item['ks_icon_select'] = "Default" + item['ks_icon'] = False + if 'ks_dn_header_line' in item: + del item['ks_dn_header_line'] + if 'ks_multiplier_lines' in item: + del item['ks_multiplier_lines'] + + ks_item = self.env['ks_dashboard_ninja.item'].create(item) + + if ks_goal_lines and len(ks_goal_lines) != 0: + for line in ks_goal_lines: + line['ks_goal_date'] = datetime.datetime.strptime(line['ks_goal_date'].split(" ")[0], + '%Y-%m-%d') + line['ks_dashboard_item'] = ks_item.id + self.env['ks_dashboard_ninja.item_goal'].create(line) + + if ks_dn_header_line and len(ks_dn_header_line) != 0: + for line in ks_dn_header_line: + ks_line = {} + ks_line['ks_to_do_header'] = line.get('ks_to_do_header') + ks_line['ks_dn_item_id'] = ks_item.id + ks_dn_header_id = self.env['ks_to.do.headers'].create(ks_line) + if line.get(line.get('ks_to_do_header'), False): + for ks_task in line.get(line.get('ks_to_do_header')): + ks_task['ks_to_do_header_id'] = ks_dn_header_id.id + self.env['ks_to.do.description'].create(ks_task) + + if ks_action_lines and len(ks_action_lines) != 0: + + for line in ks_action_lines: + if line['ks_sort_by_field']: + ks_sort_by_field = line['ks_sort_by_field'] + ks_sort_record_id = self.env['ir.model.fields'].search( + [('model', '=', ks_model_name), ('name', '=', ks_sort_by_field)]) + if ks_sort_record_id: + line['ks_sort_by_field'] = ks_sort_record_id.id + else: + line['ks_sort_by_field'] = False + if line['ks_item_action_field']: + ks_item_action_field = line['ks_item_action_field'] + ks_record_id = self.env['ir.model.fields'].search( + [('model', '=', ks_model_name), ('name', '=', ks_item_action_field)]) + if ks_record_id: + line['ks_item_action_field'] = ks_record_id.id + line['ks_dashboard_item_id'] = ks_item.id + self.env['ks_dashboard_ninja.item_action'].create(line) + + if ks_multiplier_lines and len(ks_multiplier_lines) != 0: + for rec in ks_multiplier_lines: + ks_multiplier_field = rec['ks_multiplier_fields'] + ks_multiplier_field_id = self.env['ir.model.fields'].search( + [('model', '=', ks_model_name), ('id', '=', ks_multiplier_field)]) + if ks_multiplier_field: + rec['ks_multiplier_fields'] = ks_multiplier_field_id.id + rec['ks_dashboard_item_id'] = ks_item.id + self.env['ks_dashboard_item.multiplier'].create(rec) + + return ks_item + + def ks_prepare_item(self, item): + try: + ks_measure_field_ids = [] + ks_measure_field_2_ids = [] + ks_many2many_field_ordering = item['ks_many2many_field_ordering'] if item.get('ks_many2many_field_ordering', False) else False + ks_list_view_group_fields_name = False + ks_list_view_fields_name = False + ks_chart_measure_field_name = False + ks_chart_measure_field_2_name = False + if ks_many2many_field_ordering: + ks_many2many_field_ordering = json.loads(ks_many2many_field_ordering) + ks_list_view_group_fields_name = ks_many2many_field_ordering.get('ks_list_view_group_fields_name', False) + ks_list_view_fields_name = ks_many2many_field_ordering.get('ks_list_view_fields_name', False) + ks_chart_measure_field_name = ks_many2many_field_ordering.get('ks_chart_measure_field_name', False) + ks_chart_measure_field_2_name = ks_many2many_field_ordering.get('ks_chart_measure_field_2_name', False) + ks_chart_measure_field = item['ks_chart_measure_field'] + if ks_chart_measure_field_name and len(ks_chart_measure_field_name)>0: + ks_chart_measure_field = ks_chart_measure_field_name + for ks_measure in ks_chart_measure_field: + ks_measure_id = self.env['ir.model.fields'].search( + [('name', '=', ks_measure), ('model', '=', item['ks_model_id'])]) + if ks_measure_id: + ks_measure_field_ids.append(ks_measure_id.id) + item['ks_chart_measure_field'] = [(6, 0, ks_measure_field_ids)] + ks_chart_measure_field_2 = item['ks_chart_measure_field_2'] + if ks_chart_measure_field_name and len(ks_chart_measure_field_name) > 0: + ks_chart_measure_field_2 = ks_chart_measure_field_2_name + for ks_measure in ks_chart_measure_field_2: + ks_measure_id = self.env['ir.model.fields'].search( + [('name', '=', ks_measure), ('model', '=', item['ks_model_id'])]) + if ks_measure_id: + ks_measure_field_2_ids.append(ks_measure_id.id) + item['ks_chart_measure_field_2'] = [(6, 0, ks_measure_field_2_ids)] + + ks_list_view_group_fields_ids = [] + ks_list_view_group_fields = item['ks_list_view_group_fields'] + if ks_list_view_group_fields_name and len(ks_list_view_group_fields_name) > 0: + ks_list_view_group_fields = ks_list_view_group_fields_name + for ks_measure in ks_list_view_group_fields: + ks_measure_id = self.env['ir.model.fields'].search( + [('name', '=', ks_measure), ('model', '=', item['ks_model_id'])]) + + if ks_measure_id: + ks_list_view_group_fields_ids.append(ks_measure_id.id) + item['ks_list_view_group_fields'] = [(6, 0, ks_list_view_group_fields_ids)] + + ks_list_view_field_ids = [] + + ks_list_view_fields = item['ks_list_view_fields'] + if ks_list_view_fields_name and len(ks_list_view_fields_name) > 0: + ks_list_view_fields = ks_list_view_group_fields_name + for ks_list_field in ks_list_view_fields: + ks_list_field_id = self.env['ir.model.fields'].search( + [('name', '=', ks_list_field), ('model', '=', item['ks_model_id'])]) + if ks_list_field_id: + ks_list_view_field_ids.append(ks_list_field_id.id) + item['ks_list_view_fields'] = [(6, 0, ks_list_view_field_ids)] + + if item['ks_record_field']: + ks_record_field = item['ks_record_field'] + ks_record_id = self.env['ir.model.fields'].search( + [('name', '=', ks_record_field), ('model', '=', item['ks_model_id'])]) + if ks_record_id: + item['ks_record_field'] = ks_record_id.id + else: + item['ks_record_field'] = False + + if item['ks_date_filter_field']: + ks_date_filter_field = item['ks_date_filter_field'] + ks_record_id = self.env['ir.model.fields'].search( + [('name', '=', ks_date_filter_field), ('model', '=', item['ks_model_id'])]) + if ks_record_id: + item['ks_date_filter_field'] = ks_record_id.id + else: + item['ks_date_filter_field'] = False + + if item['ks_chart_relation_groupby']: + ks_group_by = item['ks_chart_relation_groupby'] + ks_record_id = self.env['ir.model.fields'].search( + [('name', '=', ks_group_by), ('model', '=', item['ks_model_id'])]) + if ks_record_id: + item['ks_chart_relation_groupby'] = ks_record_id.id + else: + item['ks_chart_relation_groupby'] = False + + if item['ks_chart_relation_sub_groupby']: + ks_group_by = item['ks_chart_relation_sub_groupby'] + ks_chart_relation_sub_groupby = self.env['ir.model.fields'].search( + [('name', '=', ks_group_by), ('model', '=', item['ks_model_id'])]) + if ks_chart_relation_sub_groupby: + item['ks_chart_relation_sub_groupby'] = ks_chart_relation_sub_groupby.id + else: + item['ks_chart_relation_sub_groupby'] = False + + if item['ks_dashboard_item_type'] == "ks_scatter_chart" and item[ + 'ks_scatter_measure_x_id']: + # ks_scatter_id = self.env['ir.model.fields'].search( + # [('name', '=', item['ks_scatter_measure_y_id'][0]), ('model', '=', item['ks_model_id'])]) + # if ks_scatter_id: + # item['ks_scatter_measure_y_id'] = ks_scatter_id.id + ks_scatter_group_by = item['ks_scatter_measure_x_id'] + ks_record_id = self.env['ir.model.fields'].search( + [('name', '=', ks_scatter_group_by), ('model', '=', item['ks_model_id'])]) + if ks_record_id: + item['ks_scatter_measure_x_id'] = ks_record_id.id + else: + item['ks_scatter_measure_x_id'] = False + if item["ks_dashboard_item_type"] != "ks_scatter_chart": + item['ks_scatter_measure_x_id'] = False + # item['ks_scatter_measure_y_id'] = False + + # Sort by field : Many2one Entery + if item['ks_sort_by_field']: + ks_group_by = item['ks_sort_by_field'] + ks_sort_by_field = self.env['ir.model.fields'].search( + [('name', '=', ks_group_by), ('model', '=', item['ks_model_id'])]) + if ks_sort_by_field: + item['ks_sort_by_field'] = ks_sort_by_field.id + else: + item['ks_sort_by_field'] = False + + if item['ks_list_target_deviation_field']: + ks_list_target_deviation_field = item['ks_list_target_deviation_field'] + record_id = self.env['ir.model.fields'].search( + [('name', '=', ks_list_target_deviation_field), ('model', '=', item['ks_model_id'])]) + if record_id: + item['ks_list_target_deviation_field'] = record_id.id + else: + item['ks_list_target_deviation_field'] = False + + ks_model_id = self.env['ir.model'].search([('model', '=', item['ks_model_id'])]).id + + if item.get("ks_actions"): + ks_action = self.env.ref(item["ks_actions"], False) + if ks_action: + item["ks_actions"] = ks_action.id + else: + item["ks_actions"] = False + if item.get("ks_client_action"): + ks_action = self.env.ref(item["ks_client_action"], False) + if ks_action: + item["ks_client_action"] = ks_action.id + else: + item["ks_client_action"] = False + + if (item['ks_model_id_2']): + ks_model_2 = item['ks_model_id_2'].replace(".", "_") + ks_model_id_2 = self.env['ir.model'].search([('model', '=', item['ks_model_id_2'])]).id + if item['ks_record_field_2']: + ks_record_field = item['ks_record_field_2'] + ks_record_id = self.env['ir.model.fields'].search( + [('model', '=', item['ks_model_id_2']), ('name', '=', ks_record_field)]) + + if ks_record_id: + item['ks_record_field_2'] = ks_record_id.id + else: + item['ks_record_field_2'] = False + if item['ks_date_filter_field_2']: + ks_record_id = self.env['ir.model.fields'].search( + [('model', '=', item['ks_model_id_2']), ('name', '=', item['ks_date_filter_field_2'])]) + + if ks_record_id: + item['ks_date_filter_field_2'] = ks_record_id.id + else: + item['ks_date_filter_field_2'] = False + + item['ks_model_id_2'] = ks_model_id_2 + else: + item['ks_date_filter_field_2'] = False + item['ks_record_field_2'] = False + + item['ks_model_id'] = ks_model_id + + item['ks_goal_liness'] = False + item['ks_item_start_date'] = item['ks_item_start_date'] if \ + item['ks_item_start_date'] else False + item['ks_item_end_date'] = item['ks_item_end_date'] if \ + item['ks_item_end_date'] else False + item['ks_item_start_date_2'] = item['ks_item_start_date_2'] if \ + item['ks_item_start_date_2'] else False + item['ks_item_end_date_2'] = item['ks_item_end_date_2'] if \ + item['ks_item_end_date_2'] else False + + return item + except Exception as e: + raise ValidationError('JSON file not supported.') + @api.model + def update_child_board(self, action, dashboard_id, data): + dashboard_id = self.browse(dashboard_id) + selecred_rec = self.env['ks_dashboard_ninja.child_board'].search( + [['id', 'in', dashboard_id.ks_child_dashboard_ids.ids], + ['company_id', '=', self.env.company.id], ['ks_active', '=', True]], limit=1) + if action == 'create': + dashboard_id.ks_child_dashboard_ids.write({'ks_active': False}) + result = self.env['ks_dashboard_ninja.child_board'].create(data) + result = result.id + elif action == 'update': + # result = dashboard_id.ks_child_dashboard_ids.search([['ks_active', '=', True]]).write({'ks_active': False}) + if data['ks_selected_board_id'] != 'ks_default': + selecred_rec.ks_active = False + result = dashboard_id.ks_child_dashboard_ids.browse(int(data['ks_selected_board_id'])).write( + {'ks_active': True}) + else: + result = dashboard_id.ks_child_dashboard_ids.search([['ks_active', '=', True]]).write( + {'ks_active': False}) + for i in dashboard_id.ks_child_dashboard_ids: + if i.name == 'Default Board Layout': + i.ks_active = True + return result + + def ks_prepare_dashboard_domain(self): + pre_defined_filter_ids = self.env['ks_dashboard_ninja.board_defined_filters'].search( + [['id', 'in', self.ks_dashboard_defined_filters_ids.ids], '|', ['ks_is_active', '=', True], + ['display_type', '=', 'line_section']], order='sequence') + data = {} + filter_model_ids = pre_defined_filter_ids.mapped('ks_model_id').ids + for model_id in filter_model_ids: + filter_ids = self.env['ks_dashboard_ninja.board_defined_filters'].search( + [['id', 'in', pre_defined_filter_ids.ids], '|', ['ks_model_id', '=', model_id], + ['display_type', '=', 'line_section']], + order='sequence') + connect_symbol = '|' + for rec in filter_ids: + if rec.display_type == 'line_section': + connect_symbol = '&' + + if data.get(rec.ks_model_id.model) and rec.ks_domain: + data[rec.ks_model_id.model]['domain'] = data[rec.ks_model_id.model]['domain'] + safe_eval( + rec.ks_domain) + data[rec.ks_model_id.model]['domain'].insert(0, connect_symbol) + elif rec.ks_model_id.model: + ks_domain = rec.ks_domain + if ks_domain and "%UID" in ks_domain: + ks_domain = ks_domain.replace('"%UID"', str(self.env.user.id)) + if ks_domain and "%MYCOMPANY" in ks_domain: + ks_domain = ks_domain.replace('"%MYCOMPANY"', str(self.env.company.id)) + data[rec.ks_model_id.model] = { + 'domain': safe_eval(ks_domain) if ks_domain else [], + 'ks_domain_index_data': [], + 'model_name': rec.ks_model_id.name, + 'item_ids': self.env['ks_dashboard_ninja.item'].search( + [['id', 'in', self.ks_dashboard_items_ids.ids], '|', + ['ks_model_id', '=', rec.ks_model_id.id], ['ks_model_id_2', '=', rec.ks_model_id.id]]).ids + } + + return data + + def ks_prepare_dashboard_pre_domain(self): + data = {} + pre_defined_filter_ids = self.env['ks_dashboard_ninja.board_defined_filters'].search( + [['id', 'in', self.ks_dashboard_defined_filters_ids.ids]], order='sequence') + categ_seq = 1 + for rec in pre_defined_filter_ids: + if rec.display_type == 'line_section': + categ_seq = categ_seq + 1 + ks_domain = rec.ks_domain + if ks_domain and "%UID" in ks_domain: + ks_domain = ks_domain.replace('"%UID"', str(self.env.user.id)) + if ks_domain and "%MYCOMPANY" in ks_domain: + ks_domain = ks_domain.replace('"%MYCOMPANY"', str(self.env.company.id)) + + data[rec['id']] = { + 'id': rec.id, + 'name': rec.name, + 'model': rec.ks_model_id.model, + 'model_name': rec.ks_model_id.name, + 'active': rec.ks_is_active, + 'categ': rec.ks_model_id.model + '_' + str(categ_seq) if rec.display_type != 'line_section' else 0, + 'type': 'filter' if rec.display_type != 'line_section' else 'separator', + 'domain': safe_eval(ks_domain) if ks_domain else [], + 'sequence': rec.sequence + } + return data + + def ks_prepare_dashboard_custom_domain(self): + custom_filter_ids = self.env['ks_dashboard_ninja.board_custom_filters'].search( + [['id', 'in', self.ks_dashboard_custom_filters_ids.ids]], order='name') + data = {} + for rec in custom_filter_ids: + data[str(rec.id)] = { + 'id': rec.id, + 'name': rec.name, + 'model': rec.ks_model_id.model, + 'model_name': rec.ks_model_id.name, + 'field_name': rec.ks_domain_field_id.name, + 'type': rec.ks_domain_field_id.ttype, + 'relation': rec.ks_domain_field_id.relation if rec.ks_domain_field_id.ttype in ['many2many', 'many2one', + 'one2many'] else False, + 'special_data': {} + } + if rec.ks_domain_field_id.ttype == 'selection': + data[str(rec.id)]['special_data'] = { + 'select_options': + self.env[rec.ks_model_id.model].fields_get(allfields=[rec.ks_domain_field_id.name])[ + rec.ks_domain_field_id.name]['selection'] + } + return data + + def ks_prepare_dashboard_favourite_filter(self): + data = {} + ks_favourite_filter_ids = self.env['ks_dashboard_ninja.favourite_filters'].search( + [['id', 'in', self.ks_dashboard_favourite_filters_ids.ids], '|', ['ks_access_id', '=', self.env.user.id], + ['ks_access_id', '=', 0]], order='create_date') + for rec in ks_favourite_filter_ids: + data[rec.name] = {'id': rec.id, + 'filter': json.loads(rec.ks_filter), + 'name': rec.name, + 'type': rec.ks_filter_type, + 'ks_access_id': True if rec.ks_access_id else False, + } + return data diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py b/third_party_addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py new file mode 100644 index 000000000..b18aadbeb --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_dashboard_ninja_items.py @@ -0,0 +1,4598 @@ +# -*- coding: utf-8 -*- +import dateutil +import datetime as dt +from datetime import timezone +import pytz +import json +import xlrd +import csv +import os +import tempfile +import binascii +import pandas as pd +import babel +import ast +from datetime import timedelta +from odoo.tools.safe_eval import safe_eval +from odoo.tools.misc import DEFAULT_SERVER_DATETIME_FORMAT, DEFAULT_SERVER_DATE_FORMAT +from odoo.tools import sql, SQL +from collections import defaultdict +from datetime import datetime +from dateutil import relativedelta +from odoo import models, fields, api, _ +from odoo.exceptions import ValidationError, UserError +from odoo.addons.ks_dashboard_ninja.common_lib.ks_date_filter_selections import ks_get_date, ks_convert_into_utc, \ + ks_convert_into_local +from .ks_country_bounds import get_country_code +import logging +_logger = logging.getLogger("DS_NINJA") +# TODO : Check all imports if needed + + +read = fields.Many2one.read + + + +def ks_read(self, records): + if self.name == 'ks_list_view_fields' or self.name == 'ks_list_view_group_fields' or \ + self.name == 'ks_chart_measure_field' or self.name == 'ks_chart_measure_field_2': + comodel = records.env[self.comodel_name] + + # String domains are supposed to be dynamic and evaluated on client-side + # only (thus ignored here). + domain = self.domain if isinstance(self.domain, list) else [] + query = comodel._where_calc(domain) + comodel._apply_ir_rules(query, 'read') + query.order = comodel._order_to_sql(comodel._order, query) + + wquery = comodel._where_calc(domain) + comodel._apply_ir_rules(wquery, 'read') + sql_id1 = SQL.identifier(self.relation, self.column1) + sql_id2 = SQL.identifier(self.relation, self.column2) + query.add_join('JOIN', self.relation, None, SQL( + "%s = %s", sql_id2, SQL.identifier(comodel._table, 'id'), + )) + query.add_where(SQL("%s IN %s", sql_id1, tuple(records.ids))) + + group = defaultdict(list) + records.env.execute_query(query.select(sql_id1, sql_id2)) + # for id1, id2 in records.env.execute_query(query.select(sql_id1, sql_id2)): + # group[id1].append(id2) + + for record in records: + if self.name == 'ks_list_view_fields': + field = 'ks_list_view_fields' + elif self.name == 'ks_chart_measure_field': + field = 'ks_chart_measure_field' + elif self.name == 'ks_chart_measure_field_2': + field = 'ks_chart_measure_field_2' + else: + field = 'ks_list_view_group_fields' + order = False + if record.ks_many2many_field_ordering: + order = json.loads(record.ks_many2many_field_ordering).get(field, False) + + + rec_list = records._cr.fetchall() + if order: + for row in order: + group[record.id].append(row) + + else: + for id1, id2 in rec_list: + group[id1].append(id2) + + # store result in cache + # cache = records.env.cache + if order: + try: + group[record.id].sort(key=lambda x: order.index(x)) + except Exception as e: + pass + values = [tuple(group[id_]) for id_ in records._ids] + records.env.cache.insert_missing(records, self, values) + + + else: + context = {'active_test': False} + context.update(self.context) + comodel = records.env[self.comodel_name].with_context(**context) + + # make the query for the lines + domain = self.get_domain_list(records) + query = comodel._where_calc(domain) + comodel._apply_ir_rules(query, 'read') + query.order = comodel._order_to_sql(comodel._order, query) + + # join with many2many relation table + sql_id1 = SQL.identifier(self.relation, self.column1) + sql_id2 = SQL.identifier(self.relation, self.column2) + query.add_join('JOIN', self.relation, None, SQL( + "%s = %s", sql_id2, SQL.identifier(comodel._table, 'id'), + )) + query.add_where(SQL("%s IN %s", sql_id1, tuple(records.ids))) + + # retrieve pairs (record, line) and group by record + group = defaultdict(list) + for id1, id2 in records.env.execute_query(query.select(sql_id1, sql_id2)): + group[id1].append(id2) + + # store result in cache + values = [tuple(group[id_]) for id_ in records._ids] + records.env.cache.insert_missing(records, self, values) + + + +fields.Many2many.read = ks_read + +read_group = models.BaseModel._read_group_groupby + + +def ks_time_addition(self, gb, query): + """ + Overwriting default to add minutes to Helper method to collect important + information about groupbys: raw field name, type, time information, qualified name, ... + """ + split = gb.split(':') + field_type = self._fields[split[0]].type + gb_function = split[1] if len(split) == 2 else None + if gb_function == 'month_year': + gb_function = 'month' + temporal = field_type in ('date', 'datetime') + tz_convert = field_type == 'datetime' and self._context.get('tz') in pytz.all_timezones + qualified_field = self._inherits_join_calc(self._table, split[0], query) + if temporal: + lang = self.env['res.lang']._lang_get(self.env.user.lang).time_format + if '%H' in lang: + display_formats = { + 'minute': 'HH:mm dd MMM', + 'hour': 'HH:00 dd MMM', + 'day': 'dd MMM yyyy', # yyyy = normal year + 'week': "'W'w YYYY", # w YYYY = ISO week-year + 'month': 'MMMM yyyy', + 'quarter': 'QQQ yyyy', + 'year': 'yyyy', + } + else: + display_formats = { + 'minute': 'hh:mm dd MMM', + 'hour': 'hh:00 dd MMM', + 'day': 'dd MMM yyyy', # yyyy = normal year + 'week': "'W'w YYYY", # w YYYY = ISO week-year + 'month': 'MMMM yyyy', + 'quarter': 'QQQ yyyy', + 'year': 'yyyy', + } + time_intervals = { + 'minute': dateutil.relativedelta.relativedelta(minutes=1), + 'hour': dateutil.relativedelta.relativedelta(hours=1), + 'day': dateutil.relativedelta.relativedelta(days=1), + 'week': dt.timedelta(days=7), + 'month': dateutil.relativedelta.relativedelta(months=1), + 'quarter': dateutil.relativedelta.relativedelta(months=3), + 'year': dateutil.relativedelta.relativedelta(years=1) + } + if tz_convert: + qualified_field = "timezone('%s', timezone('UTC',%s))" % (self._context.get('tz', 'UTC'), qualified_field) + qualified_field = "date_trunc('%s', %s::timestamp)" % (gb_function or 'month', qualified_field) + if field_type == 'boolean': + qualified_field = "coalesce(%s,false)" % qualified_field + return { + 'field': split[0], + 'groupby': gb, + 'type': field_type, + 'display_format': display_formats[gb_function or 'month'] if temporal else None, + 'interval': time_intervals[gb_function or 'month'] if temporal else None, + 'tz_convert': tz_convert, + 'qualified_field': qualified_field, + 'granularity': gb_function or 'month' if temporal else None, + } + + +# models.BaseModel._read_group = ks_time_addition + + +class KsDashboardNinjaItems(models.Model): + _name = 'ks_dashboard_ninja.item' + _description = 'Dashboard Ninja items' + + name = fields.Char(string="Name", translate=True, help="The item will be represented by this unique name.") + ks_info = fields.Text(string="Item Description", translate=True) + ks_model_id = fields.Many2one('ir.model', string='Model', + domain="[('access_ids','!=',False),('transient','=',False)," + "('model','not ilike','base_import%'),'|',('model','not ilike','ir.%'),('model','=ilike','_%ir.%')," + "('model','not ilike','web_editor.%'),('model','not ilike','web_tour.%')," + "('model','!=','mail.thread'),('model','not ilike','ks_dash%'),('model','not ilike','ks_to%')]", + help="Data source to fetch and read the data for the creation of dashboard items. ") + ks_dashboard_board_template_id = fields.Many2one('ks_dashboard_ninja.board_template', string="Dashboard Template") + ks_domain = fields.Char(string="Domain", help="Define conditions for filter. ") + + ks_model_id_2 = fields.Many2one('ir.model', string='Kpi Model', + domain="[('access_ids','!=',False),('transient','=',False)," + "('model','not ilike','base_import%'),('model','not ilike','ir.%')," + "('model','not ilike','web_editor.%'),('model','not ilike','web_tour.%')," + "('model','!=','mail.thread'),('model','not ilike','ks_dash%'), ('model','not ilike','ks_to%')]") + + ks_model_name_2 = fields.Char(related='ks_model_id_2.model', string="Kpi Model Name") + + zoom_enabled = fields.Boolean(string="Zoom enabled?", compute="compute_zoom_enabled") + + def compute_zoom_enabled(self): + for rec in self: + rec.zoom_enabled = self.env['ir.config_parameter'].sudo().get_param('ks_dashboard_ninja.enable_chart_zoom') + + # This field main purpose is to store %UID as current user id. Mainly used in JS file as container. + ks_domain_temp = fields.Char(string="Domain Substitute") + grid_corners = fields.Char(string="grid corners") + ks_background_color = fields.Char(string="Background Color", + default="#DAEAF6,0.99", help=' Select the background color with transparency. ') + ks_icon = fields.Binary(string="Upload Icon", attachment=True) + ks_default_icon = fields.Char(string="Icon", default="bar-chart", help='Select the icon to be displayed. ') + ks_default_icon_color = fields.Char(default="#6789C6,0.99", string="Icon Color", + help='Select the icon to be displayed. ') + ks_icon_select = fields.Selection([("Default","Default"),("Custom","Custom"),],string="Icon Option", default=("Default"), help='Choose the Icon option. ') + ks_font_color = fields.Char(default="#000000,0.99", string="Font Color", help='Select the font color. ') + ks_dashboard_item_theme = fields.Char(string="Theme", default="white", + help='Select the color theme for the display. ') + ks_layout = fields.Selection([('layout1', 'Layout 1'), + ('layout2', 'Layout 2'), + ('layout3', 'Layout 3'), + ('layout4', 'Layout 4'), + ('layout5', 'Layout 5'), + ('layout6', 'Layout 6'), + ], default=('layout5'), required=True, string="Layout", + help=' Select the layout to display records. ') + ks_preview = fields.Integer(default=1, string="Preview") + ks_model_name = fields.Char(related='ks_model_id.model', string="Model Name") + + ks_record_count_type_2 = fields.Selection([('count', 'Count'), + ('sum', 'Sum'), + ('average', 'Average')], string="Kpi Record Type", default="sum") + ks_record_field_2 = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id_2),('name','!=','id'),('name','!=','sequence'),('store','=',True)," + "'|','|',('ttype','=','integer'),('ttype','=','float')," + "('ttype','=','monetary')]", + string="Kpi Record Field") + ks_record_count_2 = fields.Float(string="KPI Record Count", readonly=True, compute='ks_get_record_count_2', + compute_sudo=False) + ks_record_count_type = fields.Selection([('count', 'Count'), + ('sum', 'Sum'), + ('average', 'Average')], string="Record Type", default="count", + help="Type of record how record will show as count,sum and average of the record") + ks_record_count = fields.Float(string="Record Count", compute='ks_get_record_count', readonly=True, + compute_sudo=False) + ks_record_field = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('store','=',True),'|'," + "'|',('ttype','=','integer'),('ttype','=','float')," + "('ttype','=','monetary')]", + string="Record Field") + ks_send_mail = fields.Boolean(string="Send Mail") + ks_email_to_ids = fields.Many2many('ks_dashboard_ninja.kpi_mail',string="Email Address") + ks_stop_mail_cron = fields.Boolean(string="Stop mail cron") + ks_record_data_limit_visibility = fields.Boolean(string="Record Limit Data Visibility", + help="To enable the record data limit field") + + # Date Filter Fields + # Condition to tell if date filter is applied or not + ks_isDateFilterApplied = fields.Boolean(default=False) + + # ---------------------------- Date Filter Fields ------------------------------------------ + ks_date_filter_selection = fields.Selection([ + ('l_none', 'None'), + ('l_day', 'Today'), + ('t_week', 'This Week'), + ('t_month', 'This Month'), + ('t_quarter', 'This Quarter'), + ('t_year', 'This Year'), + ('td_week', 'Week to Date'), + ('td_month', 'Month to Date'), + ('td_quarter', 'Quarter to Date'), + ('td_year', 'Year to Date'), + ('n_day', 'Next Day'), + ('n_week', 'Next Week'), + ('n_month', 'Next Month'), + ('n_quarter', 'Next Quarter'), + ('n_year', 'Next Year'), + ('ls_day', 'Last Day'), + ('ls_week', 'Last Week'), + ('ls_month', 'Last Month'), + ('ls_quarter', 'Last Quarter'), + ('ls_year', 'Last Year'), + ('l_week', 'Last 7 days'), + ('l_month', 'Last 30 days'), + ('l_quarter', 'Last 90 days'), + ('l_year', 'Last 365 days'), + ('ls_past_until_now', 'Past Till Now'), + ('ls_pastwithout_now', ' Past Excluding Today'), + ('n_future_starting_now', 'Future Starting Now'), + ('n_futurestarting_tomorrow', 'Future Starting Tomorrow'), + ('l_custom', 'Custom Filter'), + ], string="Date Filter Selection", default="l_none", required=True, + help='Select interval of the records to be displayed. ') + ks_date_filter_field = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('store','=',True),'|',('ttype','=','date')," + "('ttype','=','datetime')]", + string="Date Filter Field", + help='Select the field for which Date Filter should be applicable.') + + ks_item_start_date = fields.Datetime(string="Start Date") + ks_item_end_date = fields.Datetime(string="End Date") + + ks_date_filter_field_2 = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id_2),('store','=',True),'|',('ttype','=','date')," + "('ttype','=','datetime')]", + string="Kpi Date Filter Field") + + ks_item_start_date_2 = fields.Datetime(string="Kpi Start Date") + ks_item_end_date_2 = fields.Datetime(string="Kpi End Date") + + ks_domain_2 = fields.Char(string="Kpi Domain") + ks_domain_2_temp = fields.Char(string="Kpi Domain Substitute") + + ks_date_filter_selection_2 = fields.Selection([ + ('l_none', "None"), + ('l_day', 'Today'), + ('t_week', 'This Week'), + ('t_month', 'This Month'), + ('t_quarter', 'This Quarter'), + ('t_year', 'This Year'), + ('td_week', 'Week to Date'), + ('td_month', 'Month to Date'), + ('td_quarter', 'Quarter to Date'), + ('td_year', 'Year to Date'), + ('n_day', 'Next Day'), + ('n_week', 'Next Week'), + ('n_month', 'Next Month'), + ('n_quarter', 'Next Quarter'), + ('n_year', 'Next Year'), + ('ls_day', 'Last Day'), + ('ls_week', 'Last Week'), + ('ls_month', 'Last Month'), + ('ls_quarter', 'Last Quarter'), + ('ls_year', 'Last Year'), + ('l_week', 'Last 7 days'), + ('l_month', 'Last 30 days'), + ('l_quarter', 'Last 90 days'), + ('l_year', 'Last 365 days'), + ('ls_past_until_now', 'Past Till Now'), + ('ls_pastwithout_now', ' Past Excluding Today'), + ('n_future_starting_now', 'Future Starting Now'), + ('n_futurestarting_tomorrow', 'Future Starting Tomorrow'), + ('l_custom', 'Custom Filter'), + ], string="Kpi Date Filter Selection", required=True, default='l_none') + + ks_previous_period = fields.Boolean(string=" Compare With Previous Period ", help='Checkbox to show comparison between the data of present day and the previous selected period. ') + + # ------------------------ Pro Fields -------------------- + ks_dashboard_ninja_board_id = fields.Many2one('ks_dashboard_ninja.board', string="Dashboard", + default=lambda self: self._context[ + 'ks_dashboard_id'] if 'ks_dashboard_id' in self._context + else False) + + # Chart related fields + ks_dashboard_item_type = fields.Selection([('ks_tile', 'Tile'), + ('ks_bar_chart', 'Bar Chart'), + ('ks_horizontalBar_chart', 'Horizontal Bar Chart'), + ('ks_line_chart', 'Line Chart'), + ('ks_area_chart', 'Area Chart'), + ('ks_pie_chart', 'Pie Chart'), + ('ks_doughnut_chart', 'Doughnut Chart'), + ('ks_polarArea_chart', 'Polar Area Chart'), + ('ks_radialBar_chart', 'Radial Bar Chart'), + ('ks_scatter_chart', 'Scatter Chart'), + ('ks_list_view', 'List View'), + ('ks_radar_view', 'Radar View'), + ('ks_flower_view', 'Flower View'), + ('ks_kpi', 'KPI'), + ('ks_to_do', 'To Do'), + ('ks_map_view', 'Map View'), + ('ks_funnel_chart', 'Funnel Chart'), + ('ks_bullet_chart', 'Bullet Chart') + ], default=lambda self: self._context.get('ks_dashboard_item_type', + 'ks_tile'), required=True, + string="Dashboard Item Type", + help="Select the required type of dashboard to display. ") + ks_chart_groupby_type = fields.Char(compute='get_chart_groupby_type', compute_sudo=False) + ks_chart_sub_groupby_type = fields.Char(compute='get_chart_sub_groupby_type', compute_sudo=False) + ks_chart_relation_groupby = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence')," + "('store','=',True),('ttype','!=','binary')," + "('ttype','!=','many2many'), ('ttype','!=','one2many')]", + string="Group By", help=' Define the x-axis of the graph. ') + ks_chart_relation_sub_groupby = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence')," + "('store','=',True),('ttype','!=','binary')," + "('ttype','!=','many2many'), ('ttype','!=','one2many')]", + string=" Sub Group By", + help='Select the second level of grouping. ') + ks_chart_date_groupby = fields.Selection([('minute', 'Minute'), + ('hour', 'Hour'), + ('day', 'Day'), + ('week', 'Week'), + ('month', 'Month'), + ('quarter', 'Quarter'), + ('year', 'Year'), + ('month_year', 'Month-Year') + ], string="Dashboard Item Chart Group By Type") + ks_chart_date_sub_groupby = fields.Selection([('minute', 'Minute'), + ('hour', 'Hour'), + ('day', 'Day'), + ('week', 'Week'), + ('month', 'Month'), + ('quarter', 'Quarter'), + ('year', 'Year'), + ], string="Dashboard Item Chart Sub Group By Type") + ks_graph_preview = fields.Char(string="Graph Preview", default="Graph Preview") + ks_chart_data = fields.Char(string="Chart Data in string form", compute='ks_get_chart_data', compute_sudo=False) + ks_chart_data_count_type = fields.Selection([('count', 'Count'), ('sum', 'Sum'), ('average', 'Average')], + string="Data Type", default="sum") + ks_chart_measure_field = fields.Many2many('ir.model.fields', 'ks_dn_measure_field_rel', 'measure_field_id', + 'field_id', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence')," + "('store','=',True),'|','|'," + "('ttype','=','integer'),('ttype','=','float')," + "('ttype','=','monetary')]", + string="Measure 1", help='Data points to be selected.') + ks_chart_is_cumulative = fields.Boolean('Is Cumulative') + ks_chart_cumulative_field = fields.Many2many('ir.model.fields', 'ks_dn_cumulative_measure_field_rel', + 'measure_cumulative_field_id', + 'cumulative_field_id', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name'," + "'!=','sequence'), " + "('store','=',True),'|','|'," + "('ttype','=','integer'),('ttype','=','float')," + "('ttype','=','monetary')]", + string="Cumulative Fields", help='Data points to be selected.') + + ks_chart_cumulative = fields.Boolean("Cumulative As Line") + ks_chart_measure_field_2 = fields.Many2many('ir.model.fields', 'ks_dn_measure_field_rel_2', 'measure_field_id_2', + 'field_id', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence')," + "('store','=',True),'|','|'," + "('ttype','=','integer'),('ttype','=','float')," + "('ttype','=','monetary')]", + string="Line Measure", + help='Data Points displayed with a line in the graph. ') + + ks_bar_chart_stacked = fields.Boolean(string="Stacked Bar Chart", help='Stack the columns of the same record. ') + + ks_semi_circle_chart = fields.Boolean(string="Semi Circle Chart") + + ks_sort_by_field = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence'),('store','=',True)," + "('ttype','!=','one2many'),('ttype','!=','binary')]", + string="Sort By Field", help='Select the desired sorting preference. ') + ks_sort_by_order = fields.Selection([('ASC', 'Ascending'), ('DESC', 'Descending')], + string="Sort Order", help=' Select the order of the sorting. ') + ks_record_data_limit = fields.Integer(string="Record Limit", help=' Records to be displayed on the graph') + + ks_list_view_preview = fields.Char(string="List View Preview", default="List View Preview") + + ks_kpi_preview = fields.Char(string="Kpi Preview", default="KPI Preview") + + ks_kpi_type = fields.Selection([ + ('layout_1', 'KPI With Target'), + ('layout_2', 'Data Comparison'), + ], string="Kpi Layout", default="layout_1") + + ks_target_view = fields.Selection([("Number","Number"),("Progress Bar","Progress Bar"),],string="View", default="Number", help=' Select the view to compare target with data.') + + ks_data_comparison = fields.Selection([("None","None"),("Sum","Sum"),("Ratio","Ratio"),("Percentage","Percentage"),],string="Kpi Data Type", default="None") + + ks_kpi_data = fields.Char(string="KPI Data", compute="ks_get_kpi_data", compute_sudo=False) + + ks_chart_item_color = fields.Selection( + [('default', 'Default'), ('dark', 'Dark'), ('material', 'Material'), ('moonrise', 'Moonrise')], + string="Chart Color Palette", default="default", help='Select the display preference. ') + + # ------------------------ List View Fields ------------------------------ + + ks_list_view_type = fields.Selection([('ungrouped', 'Un-Grouped'), ('grouped', 'Grouped')], default="ungrouped", + string="List View Type", required=True, + help='Select the desired list view type. ') + ks_list_view_fields = fields.Many2many('ir.model.fields', 'ks_dn_list_field_rel', 'list_field_id', 'field_id', + domain="[('model_id','=',ks_model_id),('ttype','!=','one2many')," + "('ttype','!=','many2many'),('ttype','!=','binary')]", + string="Fields to show in list", + help=' Select the fields you want to display in the list. ') + + ks_export_all_records = fields.Boolean(string="Export All Records", default=True, + help="when click on boolean button, all the records will be downloaded which are present in entire list") + + ks_list_view_group_fields = fields.Many2many('ir.model.fields', 'ks_dn_list_group_field_rel', 'list_field_id', + 'field_id', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence')," + "('store','=',True),'|','|'," + "('ttype','=','integer'),('ttype','=','float')," + "('ttype','=','monetary')]", + string="List View Grouped Fields") + + ks_list_view_data = fields.Char(string="List View Data in JSon", compute='ks_get_list_view_data', + compute_sudo=False) + + # -------------------- Multi Company Feature --------------------- + ks_company_id = fields.Many2one('res.company', string='Company', default=lambda self: self.env.user.company_id, + help='Name of the company for which analytics will be displayed in the dashboard. ') + + # -------------------- Target Company Feature --------------------- + ks_goal_enable = fields.Boolean(string="Enable Target", help='Show the set target.') + ks_goal_bar_line = fields.Boolean(string="Show Target As Line") + ks_standard_goal_value = fields.Float(string="Standard Target", help='Show the set target') + ks_goal_lines = fields.One2many('ks_dashboard_ninja.item_goal', 'ks_dashboard_item', string="Target Lines") + + ks_list_target_deviation_field = fields.Many2one('ir.model.fields', 'list_field_id', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence')," + "('store','=',True),'|','|'," + "('ttype','=','integer'),('ttype','=','float')," + "('ttype','=','monetary')]", + ) + + ks_many2many_field_ordering = fields.Char() + + # TODO : Merge all these fields into one and show a widget to get output for these fields from JS + ks_show_data_value = fields.Boolean(string="Show Data Value", help=' Display value on the graph. . ') + + ks_action_lines = fields.One2many('ks_dashboard_ninja.item_action', 'ks_dashboard_item_id', string="Action Lines") + + ks_actions = fields.Many2one('ir.actions.act_window', domain="[('res_model','=',ks_model_name)]", + string="Actions", help="Redirects you to the selected view. ") + + ks_compare_period = fields.Integer(string="Include Period", + help=' Provide the number of Date Filter Selection you want to include while displaying the record.') + ks_year_period = fields.Integer(string="Same Period Previous Years", + help=' Display the record for the same Date field for the last year. ') + ks_compare_period_2 = fields.Integer(string="KPI Include Period") + ks_year_period_2 = fields.Integer(string="KPI Same Period Previous Years") + + ks_multiplier_active = fields.Boolean(string="Apply Multiplier", default=False, + help="Provides the visibility of multiplier field") + ks_multiplier = fields.Float(string="Multiplier",default=1, help="Provides the multiplication of record value") + + + + # User can select custom units for measure + ks_currency_id= fields.Many2one("res.currency",string="Currency", domain="['|', ('active', '=', False), ('active', '=', True)]", + default=lambda self: self.env.company.currency_id) + + ks_unit = fields.Boolean(string="Show Custom Unit", default=False, help='Display the unit of the data.') + ks_unit_selection = fields.Selection([ + ('monetary', 'Monetary'), + ('custom', 'Custom'), + ], string="Select Unit Type", help='Select the unit to be assigned to the value. ') + ks_chart_unit = fields.Char(string="Enter Unit", size=5, default="", + help="Maximum limit 5 characters, for ex: km, m") + + # User can stop propagation of the tile item + ks_show_records = fields.Boolean(string="Show Records", default=True, help="""This field Enable the click on + Dashboard Items to view the Odoo + default view of records""") + # Field for fill temp data + ks_fill_temporal = fields.Boolean('Fill Temporal Value') + # Domain Extension field + ks_domain_extension = fields.Char('Domain Extension', help="Define conditions for filter to write manually") + ks_domain_extension_2 = fields.Char('KPI Domain Extension') + # hide legend + ks_hide_legend = fields.Boolean('Show Legend', help="Hide all legend from the chart item", default=False) + ks_radial_legend = fields.Boolean('Show Radial Legend', help="Hide all legend from the chart item", default=False) + ks_data_calculation_type = fields.Selection([('custom', 'Default Query'), + ('query', 'Custom Query')], string="Data Calculation Type", + default="custom", + help='Select the type of calculation you want to perform on the data.') + + # to show the Global / Indian / Exact Number Format + ks_data_format = fields.Selection([ + ('global', 'English Format'), + ('indian', 'Indian Format'), + ('colombian', 'Colombian Peso Format'), + ('exact', 'Exact Value')], + string='Number System', + default='global', + help="To Change the number format showing in chart to given option") + ks_button_color = fields.Char(string="Top Button Color", + default="#000000,0.99") + + + ks_is_client_action = fields.Boolean('Client Action', default=False) + ks_client_action = fields.Many2one('ir.actions.client', + string="Client Item Action", + domain="[('name','!=','App Store'),('name','!=','Updates'),('res_model','not ilike','ks_dashboard_ninja.%'),('name','!=','Discuss')]", + help="This Action will be Performed at the end of Drill Down Action") + + ks_pagination_limit = fields.Integer('Pagination Limit', default=15) + + ks_multiplier_lines = fields.One2many('ks_dashboard_item.multiplier', 'ks_dashboard_item_id', + + readonly=False, store=True, + string="Multiplier Lines") + + ks_precision_digits = fields.Integer('Digits', compute="_ks_compute_precision_digits", store=True, readonly=False) + + ks_scatter_measure_x_id = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence')," + "('store','=',True),'|','|'," + "('ttype','=','integer'),('ttype','=','float')," + "('ttype','=','monetary')]", + string="Measure X") + # ks_scatter_ungroup_measure_y_id = fields.Many2one('ir.model.fields', + # domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence')," + # "('store','=',True),'|','|'," + # "('ttype','=','integer'),('ttype','=','float')," + # "('ttype','=','monetary')]", + # string="Measure Y") + ks_is_scatter_group = fields.Boolean(string="Scatter Group By") + ks_scatter_measure_y_id = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence')," + "('store','=',True),'|','|'," + "('ttype','=','integer'),('ttype','=','float')," + "('ttype','=','monetary')]", + string="Measure Y") + ks_scatter_field_id = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence')," + "('store','=',True),('ttype','!=','binary')," + "('ttype','!=','many2many'), ('ttype','!=','one2many')]", + string="Scatter Points") + + ks_data_label_type = fields.Selection([('percent', 'Percent'), ('value', 'Value')], string='Show Data Value Type', + help='When "Show Data Value Type" selected this field enables to select label type in percent or value', + default='percent') + ks_as_of_now = fields.Boolean("Data Till Now", + help="Display the total sum of each legends as it grows with times") + ks_radial_preview = fields.Char(string="Radial Preview", default="Radial Preview") + ks_map_preview = fields.Char(string="Map Preview", default="Map Preview") + ks_partners_map = fields.Char(compute="_compute_map_partners") + ks_country_id = fields.Many2one('res.country', string="Country") + ks_country_code = fields.Char(related="ks_country_id.code", store=True) + ks_bounds = fields.Char(compute="_compute_bounds", store=True) + + ks_funnel_preview = fields.Char(string="Funnel Preview", default="Funnel Preview") + ks_funnel_record_field = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('store','=',True),'|'," + "'|',('ttype','=','integer'),('ttype','=','float')," + "('ttype','=','monetary')]", + string="Funnel Record Field") + ks_map_record_field = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('store','=',True),'|'," + "'|',('ttype','=','integer'),('ttype','=','float')," + "('ttype','=','monetary')]", + string="Map Record Field") + + ks_map_chart_relation_groupby = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence')," + "('store','=',True),('ttype','!=','binary')," + "('ttype','!=','many2many'), ('ttype','!=','one2many'),('relation', '=', 'res.partner')]", + string="Map Group By") + + + + ks_bullet_preview = fields.Char(string="Bullet Preview", default="Bullet Preview") + ks_flower_view_preview = fields.Char(string="Flower Preview", default="Flower Preview") + + + upload_excel = fields.Binary(string='Upload Excel File', attachment=False) + ks_csv_field = fields.Binary(string='Upload CSV File', attachment=False) + ks_group_by_lines = fields.One2many('ks.dashboard.group.by', 'ks_dashboard_group_by_id', string="Group By Lines") + ks_csv_group_by_lines = fields.One2many('ks.dashboard.csv.group.by', 'ks_dashboard_csv_group_by_id', string="CSV Group By Lines") + filename = fields.Char(string='Filename') + name_seq = fields.Char(help="Sequential Queue ID", copy=False) + excel_bool = fields.Boolean(string='Excel Bool') + model_bool = fields.Boolean(string='Model Bool') + csv_bool = fields.Boolean(string='CSV Bool') + ks_is_external_db = fields.Boolean() + ks_host = fields.Char() + ks_port = fields.Char() + ks_db_name = fields.Char() + ks_db_password = fields.Char() + ks_db_user = fields.Char() + data_source = fields.Selection( + [('odoo', 'Odoo'), ('excel', 'Excel'), ('csv', 'CSV')], + string="Data Source",default='odoo') + + ks_ai_analysis = fields.Char(string='AI Analysis') + + + + @api.model + def create_ai_dash(self, data, ks_dash_id, model): + try: + result= [] + for item in data: + ks_measure_field_ids = [] + value = {} + chart_switch = { + 'bar': "ks_bar_chart", + 'pie': 'ks_pie_chart', + 'donut': 'ks_doughnut_chart', + 'area': 'ks_area_chart', + 'line': 'ks_line_chart', + 'polar': 'ks_polarArea_chart', + 'horizontalbar': 'ks_horizontalBar_chart', + 'table': "ks_list_view" + } + if item["chart_type"].lower() in ['bar', 'line', 'pie', 'area', 'donut', 'polar', 'horizontalbar']: + ks_measure_id = self.env['ir.model.fields'].search( + [('name', '=', item["aggregations"][0]["field"]), ('model', '=', model)]) + if ks_measure_id and ks_measure_id['ttype'] in ['integer','float','monetary']: + ks_measure_field_ids.append(ks_measure_id.id) + value["ks_chart_measure_field"] = [(6, 0, ks_measure_field_ids)] + + + ks_record_id = self.env['ir.model.fields'].search( + [('name', '=', item["group_by_column"]), ('model', '=', model)]) + if ks_record_id: + value['ks_chart_relation_groupby'] = ks_record_id.id + if ks_record_id['ttype'] == "datetime" or ks_record_id['ttype'] == "date": + value['ks_chart_date_groupby'] = "month" + + value["name"] = item["chart_name"] + + ks_model_id = self.env['ir.model'].search([('model', '=', model)]).id + value['ks_model_id'] = ks_model_id + + if item["aggregations"][0]["type"] == 'avg': + value['ks_chart_data_count_type'] = 'average' + else: + value['ks_chart_data_count_type'] = item["aggregations"][0]["type"] + + value['ks_dashboard_item_type'] = chart_switch.get(item['chart_type'], False) + value['ks_dashboard_ninja_board_id'] = ks_dash_id + if ks_measure_field_ids and ks_record_id and ks_model_id: + try: + ks_result = self.create(value) + result.append(ks_result) + except Exception as e: + result + elif item["chart_type"].lower() == "table": + value["name"] = item["chart_name"] + value['ks_dashboard_ninja_board_id'] = ks_dash_id + value['ks_dashboard_item_type'] = chart_switch.get(item['chart_type'], False) + + ks_model_id = self.env['ir.model'].search([('model', '=', model)]).id + value['ks_model_id'] = ks_model_id + + ks_measure_id = self.env['ir.model.fields'].search( + [('name', '=', item["aggregations"][0]["field"]), ('model', '=', model)]) + if ks_measure_id and ks_measure_id['ttype'] in ['integer','float','monetary']: + ks_measure_field_ids.append(ks_measure_id.id) + value["ks_list_view_group_fields"] = [(6, 0, ks_measure_field_ids)] + # value["ks_list_view_fields"] = [(6, 0, ks_measure_field_ids)] + + ks_record_id = self.env['ir.model.fields'].search( + [('name', '=', item["group_by_column"]), ('model', '=', model)]) + if ks_record_id: + value['ks_chart_relation_groupby'] = ks_record_id.id + if ks_record_id['ttype'] == "datetime" or ks_record_id['ttype'] == "date": + value['ks_chart_date_groupby'] = "month" + value['ks_list_view_type'] = 'grouped' + if ks_measure_field_ids and ks_record_id and ks_model_id: + try: + ks_result = self.create(value) + result.append(ks_result) + except Exception as e: + result + elif item["chart_type"].lower() == "kpi": + value["name"] = item["chart_name"] + value['ks_dashboard_ninja_board_id'] = ks_dash_id + value['ks_dashboard_item_type'] = "ks_kpi" + + ks_model_id = self.env['ir.model'].search([('model', '=', model)]).id + value['ks_model_id'] = ks_model_id + + ks_measure_id = self.env['ir.model.fields'].search( + [('name', '=', item["aggregations"][0]["field"]), ('model', '=', model)]) + if ks_measure_id: + value["ks_record_field"] = ks_measure_id.id + + if item["aggregations"][0]["type"] == 'avg': + value['ks_record_count_type'] = 'average' + else: + value['ks_record_count_type'] = item["aggregations"][0]["type"] + value['ks_background_color'] = "#DAEAF6,0.99" + value['ks_default_icon_color'] = "#000000,0.99" + value['ks_font_color'] = "#000000,0.99" + value['ks_button_color'] = "#000000,0.99" + + if ks_measure_id and ks_model_id: + try: + ks_result = self.create(value) + result.append(ks_result) + except Exception as e: + result + else: + pass + if len(result): + return "success" + else: + return "Abort" + except: + raise ValidationError(_("Getting invalid response from AI, please try again")) + + + # Making model, csv and excel field invisible on condition. + @api.onchange('data_source') + def make_invisible(self): + if self.data_source == 'excel': + self.excel_bool = True + self.model_bool = False + self.csv_bool = False + elif self.data_source == 'odoo': + self.model_bool = True + self.excel_bool = False + self.csv_bool = False + elif self.data_source == 'csv': + self.csv_bool = True + self.model_bool = False + self.excel_bool = False + else: + self.model_bool = False + self.excel_bool = False + self.csv_bool = False + + + # Reading the Csv file + @api.onchange('ks_csv_field') + def read_csv(self): + if self.ks_csv_field: + if ' ' in self.filename or '_' in self.filename: + try: + fp = tempfile.NamedTemporaryFile(delete=False, suffix=".csv") + fp.write(binascii.a2b_base64(self.ks_csv_field)) + fp.seek(0) + + with open(fp.name, 'r', encoding='utf-8') as csvfile: + csv_reader = csv.reader(csvfile) + fields = [] + values = {} + header_row = next(csv_reader) + + for row in header_row: + fields.append(row) + values[row] = None + del_group_by_field = """delete from ks_dashboard_csv_new;""" + self._cr.execute(del_group_by_field) + self.env['ks.dashboard.csv.new'].search([]) + for rec in fields: + self.env['ks.dashboard.csv.new'].create({ + 'name': rec, + }) + + for line in csv_reader: + for i, field in enumerate(fields): + values[field] = line[i] + + values = {} + for field in fields: + values[field] = None + except: + raise ValidationError(_("Invalid file!")) + else: + raise ValidationError('Please add filename which contain Spaces and Underscore in there name only.') + else: + if self.ks_model_id: + model = self.env['ir.model'].search([('id', '=', self.ks_model_id.id)]) + model.unlink() + if self.ks_csv_group_by_lines: + for rec in self.ks_csv_group_by_lines: + rec.unlink() + + # Reading the Excel file + @api.onchange('upload_excel') + def _read_xls(self): + if self.upload_excel: + if ' ' in self.filename or '_' in self.filename: + try: + fp = tempfile.NamedTemporaryFile(delete=False, suffix=".xlsx") + fp.write(binascii.a2b_base64(self.upload_excel)) + fp.seek(0) + file_type = os.path.splitext(self.filename) + if file_type[1] == ".xlsx": + df = pd.read_excel(fp.name, engine='openpyxl') + elif file_type[1] == ".xls": + df = pd.read_excel(fp.name, engine='xlrd') + else: + raise ValueError("Unsupported file format. Only XLSX and XLS are supported.") + except Exception as e: + raise ValidationError(_(e)) + + values = {} + fields = df.columns.tolist() + val = {} + del_group_by_field = """delete from ks_dashboard_new;""" + self._cr.execute(del_group_by_field) + self.env['ks.dashboard.new'].search([]) + for rec in fields: + self.env['ks.dashboard.new'].create({ + 'name': str(rec), + }) + for row_no in range(df.shape[0]): + line = list(df.iloc[row_no]) + value = 0 + for field in fields: + while value < len(line): + values.update({ + field: str(line[value]), + }) + value += 1 + break + else: + raise ValidationError('Please add filename which contain Spaces and Underscore in there name only.') + else: + if self.ks_group_by_lines: + for rec in self.ks_group_by_lines: + rec.unlink() + if self.ks_model_id: + model = self.env['ir.model'].search([('id', '=', self.ks_model_id.id)]) + model.unlink() + + # Syncing the data from table to page + def data_sync(self): + data = self.env['ks.dashboard.new'].search([]) + for rec in data: + self.write({ + 'ks_group_by_lines': [(0, 0, { + 'name': rec.name + })] + }) + + def csv_data_sync(self): + data = self.env['ks.dashboard.csv.new'].search([]) + for rec in data: + self.write({ + 'ks_csv_group_by_lines': [(0, 0, { + 'name': rec.name + })] + }) + + # Creating table in ir model and adding column in it. + def create_table(self): + records = self.ks_group_by_lines + dict = [] + if records: + for rec in records: + values = {} + if not rec.ttype: + raise ValidationError('Please Enter the type under Column Data Type Tab') + values.update({ + 'name': rec.name.lower().replace(' ', '_'), + 'type': rec.ttype + }) + dict.append(values) + if '_' and '-' in self.filename: + split = self.filename.lower().split('_') + split_value = '' + for res in split: + split_value += res + final_split = split_value.split('-') + elif' ' in self.filename: + final_split = self.filename.lower().split(' ') + elif'_' in self.filename: + final_split = self.filename.lower().split('_') + else: + final_split = self.filename.lower().split('.') + tablemodel = 'x_'+final_split[0]+'_'+self.name_seq + tablename = final_split[0]+' '+self.name_seq + model_creation = self.env['ir.model'].create({ + 'name': tablename, + 'model': tablemodel, + 'order': 'x_name asc, id desc', # valid order + }) + for value in dict: + column_name = value.get('name') + column_type = value.get('type') + if '/' in column_name: + column_name = value.get('name').replace('/', '_') + if ' ' in column_name: + column_name = value.get('name').replace(' ', '_') + if '(' and ')' in column_name: + column_name = value.get('name').replace(')', '').replace('(', '') + if column_name == 'name': + column_name = column_name.replace('name', 'name1') + model_creation.write({ + 'field_id': [(0, 0, { + 'name': 'x_'+column_name, + 'ttype': column_type, + 'field_description': column_name.replace('_', ' ') + })] + }) + self.env['ir.model.access'].sudo().create({ + 'name': model_creation.name + ' all_user', + 'model_id': model_creation.id, + 'perm_read': True, + 'perm_write': False, + 'perm_create': False, + 'perm_unlink': False, + }) + self.ks_model_id = model_creation.id + self.insert_data_into_table(tablemodel) + + # Inserting data into the ir model table. + def insert_data_into_table(self, tablemodel): + if self.upload_excel: + try: + fp = tempfile.NamedTemporaryFile(delete=False, suffix=".xlsx") + fp.write(binascii.a2b_base64(self.upload_excel)) + fp.seek(0) + file_type = os.path.splitext(self.filename) + if file_type[1] == ".xlsx": + df = pd.read_excel(fp.name, engine='openpyxl') + elif file_type[1] == ".xls": + df = pd.read_excel(fp.name, engine='xlrd') + else: + raise ValueError("Unsupported file format. Only XLSX and XLS are supported.") + except Exception as e: + raise ValidationError("Invalid file") + df = df.astype(str) + values ={} + fields = df.columns.tolist() + user_timezone_str = self.env.context.get('tz', 'UTC') + for row_no in range(df.shape[0]): + line = list(df.iloc[row_no]) + val = {} + value = 0 + for field in fields: + if '/' in field: + field = field.replace('/', ' ') + if ' ' in field: + field = field.replace(' ', '_') + if '(' and ')' in field: + field = field.replace(')', '').replace('(', '') + if field == 'Name': + field = field.replace('Name', 'name1') + if 'Date' in field or 'Deadline' in field: + if line[value] != 'NaT' and line[value] !=False: + if self.ks_group_by_lines[value].ttype == 'datetime': + user_datetime_str = line[value] + local_datetime = datetime.strptime(user_datetime_str, '%Y-%m-%d %H:%M:%S') + user_timezone = pytz.timezone(user_timezone_str) + localized_datetime = user_timezone.localize(local_datetime) + utc_datetime = localized_datetime.astimezone(pytz.utc) + formatted_utc_datetime = utc_datetime.strftime('%Y-%m-%d %H:%M:%S') + # final_date = pd.to_timedelta(float(line[value]), unit='D') + pd.to_datetime('1899-12-30') + while (value < len(line)): + values.update({ + field: formatted_utc_datetime, + }) + value = value + 1 + break + else: + while (value < len(line)): + values.update({ + field: line[value], + }) + value = value + 1 + break + else: + while (value < len(line)): + values.update({ + field: 'Null', + }) + value = value + 1 + break + else: + while (value < len(line)): + if line[value] != 'nan' and line[value] !=False: + if '.' in line[value]: + if ',' in line[value]: + if self.ks_group_by_lines[value].ttype == 'char': + split = line[value].split(',') + split_value = '' + for res in split: + split_value += res + final_split = split_value.split('.') + final_split_value = '' + for final_res in final_split: + final_split_value += final_res + values.update({ + field: final_split_value, + }) + else: + split = line[value].split(',') + split_value = split[0] + split[1] + final_value = float(split_value) + values.update({ + field: final_value, + }) + elif '@' in line[value]: + values.update({ + field: line[value], + }) + else: + # final_value = (line[value]) + if self.ks_group_by_lines[value].ttype == 'integer' and line[value]!='nan': + try: + values.update({ + field: int(float(line[value])), + }) + except: + values.update({ + field: 0, + }) + elif self.ks_group_by_lines[value].ttype == 'float'and line[value]!='nan': + try: + values.update({ + field: float(line[value]), + }) + except: + values.update({ + field: 0.00, + }) + elif line[value] == 'nan': + values.update({ + field: 'Null', + }) + + else: + values.update({ + field: line[value], + }) + elif "'" and '+' in line[value]: + split_value = line[value].split('+') + final_split = '+' + split_value[1] + values.update({ + field: final_split, + }) + elif "'" in line[value]: + split_value = line[value].split("'") + final_split_value = '' + for res in split_value: + final_split_value += res + values.update({ + field: final_split_value, + }) + elif "NaT" in line[value]: + values.update({ + field:'Null', + }) + elif self.ks_group_by_lines[value].ttype == 'integer' and line[value]!='nan': + try: + values.update({ + field: int(float(line[value])), + }) + except: + values.update({ + field: 0, + }) + elif self.ks_group_by_lines[value].ttype == 'float' and line[value] != 'nan': + try: + values.update({ + field: float(line[value]), + }) + except: + values.update({ + field: 0.00, + }) + else: + values.update({ + field: line[value], + }) + value = value + 1 + break + else: + values.update({ + field: 'Null', + }) + value = value + 1 + break + final_values = [] + final_heading = [] + try: + if values.keys(): + data_values = dict([('x_' + key.lower().replace(' ', '_'), values[key]) for key in values if + values[key] != 'Null']) + self.env[tablemodel].sudo().create(data_values) + except Exception as e: + raise ValidationError("found error while Table creation {}".format(e)) + + def csv_create_table(self): + records = self.ks_csv_group_by_lines + dict = [] + if records: + for rec in records: + values = {} + if not rec.ttype: + raise ValidationError('Please Enter the type under Column Data Type Tab') + values.update({ + 'name': rec.name.lower().replace(' ', '_'), + 'type': rec.ttype + }) + dict.append(values) + if '_' and '-' in self.filename: + split = self.filename.lower().split('_') + split_value = '' + for res in split: + split_value += res + final_split = split_value.split('-') + elif ' ' in self.filename: + final_split = self.filename.lower().split(' ') + elif '_' in self.filename: + final_split = self.filename.lower().split('_') + else: + final_split = self.filename.lower().split('.') + tablemodel = 'x_'+final_split[0]+'_'+self.name_seq + tablename = final_split[0]+' '+self.name_seq + model_creation = self.env['ir.model'].create({ + 'name': tablename, + 'model': tablemodel, + 'order': 'x_name asc, id desc', # valid order + }) + for value in dict: + column_name = value.get('name') + column_type = value.get('type') + if '/' in column_name: + column_name = value.get('name').replace('/', '_') + if ' ' in column_name: + column_name = value.get('name').replace(' ', '_') + if '(' and ')' in column_name: + column_name = value.get('name').replace(')', '').replace('(', '') + if column_name == 'name': + column_name = column_name.replace('name', 'name1') + model_creation.write({ + 'field_id': [(0, 0, { + 'name': 'x_'+column_name, + 'ttype': column_type, + 'field_description': column_name.replace('_', ' ') + })] + }) + self.env['ir.model.access'].sudo().create({ + 'name': model_creation.name + ' all_user', + 'model_id': model_creation.id, + 'perm_read': True, + 'perm_write': False, + 'perm_create': False, + 'perm_unlink': False, + }) + self.ks_model_id = model_creation.id + self.insert_data_into_csv_table(tablemodel) + + def insert_data_into_csv_table(self, tablemodel): + if self.ks_csv_field: + fp = tempfile.NamedTemporaryFile(delete=False, suffix=".csv") + fp.write(binascii.a2b_base64(self.ks_csv_field)) + fp.seek(0) + + with open(fp.name, 'r', encoding='utf-8') as csvfile: + csv_reader = csv.reader(csvfile) + fields = [] + values = {} + field_values = {} + header_row = next(csv_reader) + user_timezone_str = self.env.context.get('tz', 'UTC') + for row in header_row: + fields.append(row) + field_values[row] = None + for line in csv_reader: + value = 0 + for field in fields: + if ' ' in field: + field = field.replace(' ', '_') + if '/' in field: + field = field.replace('/', ' ') + if '(' and ')' in field: + field = field.replace(')', '').replace('(', '') + if field == 'Name': + field = field.replace('Name', 'name1') + if 'Date' in field or 'Deadline' in field: + if line[value]: + if self.ks_csv_group_by_lines[value].ttype == 'datetime': + user_datetime_str = line[value] + local_datetime = datetime.strptime(user_datetime_str, '%Y-%m-%d %H:%M:%S') + user_timezone = pytz.timezone(user_timezone_str) + localized_datetime = user_timezone.localize(local_datetime) + utc_datetime = localized_datetime.astimezone(pytz.utc) + formatted_utc_datetime = utc_datetime.strftime('%Y-%m-%d %H:%M:%S') + final_date = line[value].split(' ')[0] + while (value < len(line)): + values.update({ + field: formatted_utc_datetime, + }) + value = value + 1 + break + else: + while (value < len(line)): + values.update({ + field: line[value], + }) + value = value + 1 + break + else: + while (value < len(line)): + values.update({ + field: 'Null', + }) + value = value + 1 + break + else: + while (value < len(line)): + if line[value]: + if '$' in line[value]: + line[value] = line[value].replace('$', '') + if '-' in line[value]: + line[value] = line[value].replace('-', '') + if '(' and ')' in line[value]: + line[value] = line[value].replace(')', '').replace('(', '') + if '.' in line[value]: + if ',' in line[value]: + if self.ks_csv_group_by_lines[value].ttype == 'char': + split = line[value].split(',') + split_value = '' + for res in split: + split_value += res + final_split = split_value.split('.') + final_split_value = '' + for final_res in final_split: + final_split_value += final_res + values.update({ + field: final_split_value, + }) + else: + split = line[value].split(',') + split_value = split[0] + split[1] + if self.ks_csv_group_by_lines[value].ttype == 'float': + values.update({ + field: float(split_value), + }) + elif self.ks_csv_group_by_lines[value].ttype == 'integer': + values.update({ + field: int(float(split_value)), + }) + else: + values.update({ + field: split_value, + }) + elif '@' in line[value]: + values.update({ + field: line[value], + }) + else: + if self.ks_csv_group_by_lines[value].ttype == 'float': + values.update({ + field: float(line[value]), + }) + elif self.ks_csv_group_by_lines[value].ttype == 'integer': + values.update({ + field: int(float(line[value])), + }) + else: + values.update({ + field: line[value], + }) + elif "'" and '+' in line[value]: + split_value = line[value].split('+') + final_split = '+' + split_value[1] + values.update({ + field: final_split, + }) + elif "'" in line[value]: + split_value = line[value].split("'") + final_split_value = '' + for res in split_value: + final_split_value += res + values.update({ + field: final_split_value, + }) + elif line[value] == ' ': + values.update({ + field: 'Null', + }) + value = value + 1 + break + elif self.ks_csv_group_by_lines[value].ttype == 'float': + values.update({ + field: float(line[value]), + }) + elif self.ks_csv_group_by_lines[value].ttype == 'integer': + values.update({ + field: int(float(line[value])), + }) + else: + values.update({ + field: line[value], + }) + value = value + 1 + break + else: + values.update({ + field: 'Null', + }) + value = value + 1 + break + final_values = [] + final_heading = [] + try: + if values.keys(): + data_values = dict([('x_' + key.lower().replace(' ', '_'), values[key]) for key in values if + values[key] != 'Null']) + self.env[tablemodel].sudo().create(data_values) + except Exception as e: + raise ValidationError("found error while Table creation error {}".format(e)) + + def check_target(self): + base_url = self.env['ir.config_parameter'].sudo().get_param('web.base.url') + sales_target = self.env['ks_dashboard_ninja.item'].search([ + ('ks_dashboard_item_type', '=', 'ks_kpi'), + ('ks_send_mail', '=', True), + ('ks_stop_mail_cron', '=' , False) + ]) + menu_record = self.env.ref('ks_dashboard_ninja.board_menu_root') + menu_id_1 = menu_record.id + recipient_emails = [] + email_from = self.env['res.company'].search([], limit=1) + for res in sales_target: + if res.ks_record_count >= res.ks_standard_goal_value: + dashboard_id = res.ks_dashboard_ninja_board_id.id + action_id = res.ks_dashboard_ninja_board_id.ks_dashboard_menu_id.action.id if res.ks_dashboard_ninja_board_id.ks_dashboard_menu_id.action and res.ks_dashboard_ninja_board_id.ks_dashboard_menu_id.action.id else menu_record.action.id + for partner in res.ks_email_to_ids: + recipient_emails.append(partner.name) + kpi_mail = self.env['mail.mail'].create({ + 'body_html': '

Congratulations! The Target of '+ str(res.ks_standard_goal_value) +' for '+ res.name +' is achieved!!

' + f"

Click here to check the dashboard: " + f"Dashboard Link

", + 'subject' : 'Commendable Achievement: Meeting and Exceeding Sales Targets', + 'email_from' : email_from.email, + 'email_to': ','.join(recipient_emails), + }) + kpi_mail.sudo().send() + res.ks_stop_mail_cron = True + recipient_emails = [] + + def write(self, vals): + if vals.get('ks_standard_goal_value') or vals.get('ks_record_count_type'): + self.ks_stop_mail_cron = False + return super(KsDashboardNinjaItems, self).write(vals) + + + @api.onchange('ks_year_period', 'ks_year_period_2') + def ks_year_neg_val_not_allow(self): + for rec in self: + if rec.ks_year_period < 0 or rec.ks_year_period_2 < 0 : + raise ValidationError(_(" Negative periods are not allowed ")) + + @api.onchange('ks_item_start_date', 'ks_item_end_date') + def ks_item_date_validation(self): + for rec in self: + if rec.ks_item_start_date and rec.ks_item_end_date: + if rec.ks_item_start_date > rec.ks_item_end_date: + raise ValidationError(_('Start date must be less than end date')) + + @api.onchange('ks_item_start_date_2', 'ks_item_end_date_2') + def ks_item_date_validation_2(self): + for rec in self: + if rec.ks_item_start_date_2 and rec.ks_item_end_date_2: + if rec.ks_item_start_date_2 > rec.ks_item_end_date_2: + raise ValidationError(_('Start date must be less than end date')) + + @api.onchange('ks_dashboard_item_type') + def change_data_source_to_odoo(self): + if self.ks_dashboard_item_type == 'ks_scatter_chart': + self.ks_data_calculation_type = 'custom' + + @api.onchange('ks_dashboard_item_type') + def change_data_calculation_type_to_default(self): + if self.ks_dashboard_item_type == 'ks_map_view': + self.data_source = 'odoo' + + @api.depends('ks_dashboard_item_type') + def _ks_compute_precision_digits(self): + for rec in self: + try: + precision_digits = self.sudo().env.ref('ks_dashboard_ninja.ks_dashboard_ninja_precision') + ks_precision_digits = precision_digits.digits + if ks_precision_digits < 0: + ks_precision_digits = 2 + if ks_precision_digits > 100: + ks_precision_digits = 2 + + rec.ks_precision_digits = ks_precision_digits + except Exception as E: + rec.ks_precision_digits = 2 + # default = lambda self: self.sudo().env.ref('ks_dashboard_ninja.ks_dashboard_ninja_precision') + + @api.onchange('ks_multiplier_active', 'ks_chart_measure_field', + 'ks_chart_measure_field_2' ,'ks_list_view_group_fields') + def _ks_compute_multiplier_lines(self): + for rec in self: + rec.ks_multiplier_lines = [(5, 0, 0)] + ks_chart_measure_fields = rec.ks_chart_measure_field + if rec.ks_multiplier_active: + if rec.ks_dashboard_item_type == 'ks_list_view' and rec.ks_list_view_type == 'grouped': + ks_chart_measure_fields = rec.ks_list_view_group_fields + ks_temp_list = [] + ks_chart_measure_id = [] + for ks_chart_measure_field in ks_chart_measure_fields: + ks_dict = { + 'ks_dashboard_item_id': rec.id, + 'ks_multiplier_fields': ks_chart_measure_field.ids[0], + 'ks_multiplier_value': 1 + } + ks_chart_measure_id.append(ks_chart_measure_field.ids[0]) + ks_line = self.env['ks_dashboard_item.multiplier'].create(ks_dict) + ks_temp_list.append(ks_line.id) + + if rec.ks_chart_measure_field_2: + for ks_chart_measure_field in rec.ks_chart_measure_field_2: + if ks_chart_measure_field.ids[0] not in ks_chart_measure_id: + ks_dict = { + 'ks_dashboard_item_id': rec.id, + 'ks_multiplier_fields': ks_chart_measure_field.ids[0], + 'ks_multiplier_value': 1 + } + ks_line = self.env['ks_dashboard_item.multiplier'].create(ks_dict) + ks_temp_list.append(ks_line.id) + # rec.ks_multiplier_lines = [(6, 0, [])] + # rec.ks_multiplier_lines = [(6, 0, ks_temp_list)] + rec.ks_multiplier_lines = [(6, 0, [])] + rec.ks_multiplier_lines = [(6, 0, ks_temp_list)] + + if len(rec.ks_chart_measure_field) == 0: + rec.ks_chart_cumulative_field = False + + @api.onchange('ks_list_view_type') + def _ks_onchange_ks_list_view_type(self): + for rec in self: + if rec.ks_list_view_type == 'ungrouped': + rec.ks_multiplier_active = False + + @api.onchange('ks_data_calculation_type') + def _ks_onchange_ks_data_calculation_type(self): + for rec in self: + if rec.ks_data_calculation_type == 'query': + rec.ks_list_view_type = 'ungrouped' + rec.ks_multiplier_active = False + + @api.onchange('ks_goal_lines') + def ks_is_goal_lines(self): + for rec in self: + if rec.ks_goal_enable and rec.ks_goal_lines: + rec.ks_pagination_limit = 0 + elif rec.ks_goal_enable and not rec.ks_goal_lines: + rec.ks_pagination_limit = 15 + + + @api.onchange('ks_goal_enable') + def ks_is_goal_enable(self): + for rec in self: + if not rec.ks_goal_enable : + rec.ks_goal_lines = False + rec.ks_pagination_limit = 15 + elif rec.ks_goal_enable and not rec.ks_goal_lines: + rec.ks_pagination_limit = 15 + + + @api.onchange('ks_pagination_limit') + def ks_on_negativ_limit(self): + for rec in self: + if rec.ks_pagination_limit > 0: + rec.ks_pagination_limit = rec.ks_pagination_limit + elif not rec.ks_goal_lines and rec.ks_pagination_limit <= 0: + raise ValidationError(_("Pagination limit value cannot be Negative or Zero")) + if rec.ks_goal_lines and rec.ks_pagination_limit > 0 or rec.ks_pagination_limit < 0: + raise ValidationError(_("if target lines is selected then cannot be set pagination value")) + + @api.onchange('ks_is_client_action') + def ks_on_change_item_action_to_client(self): + for rec in self: + if rec.ks_is_client_action: + rec.ks_actions = False + + @api.onchange('ks_record_data_limit_visibility') + def ks_on_change_record_data_visibility(self): + for rec in self: + if not rec.ks_record_data_limit_visibility: + rec.ks_record_data_limit = 0 + + @api.onchange('ks_fill_temporal') + def ks_onchange_fill_temporal(self): + if self.ks_fill_temporal: + self.ks_sort_by_field = self.ks_chart_relation_groupby.id + self.ks_sort_by_order = 'ASC' + else: + self.ks_sort_by_field = False + self.ks_sort_by_order = False + + @api.onchange('ks_goal_lines') + def ks_date_target_line(self): + for rec in self: + if rec.ks_chart_date_groupby in ('minute', 'hour') or rec.ks_chart_date_sub_groupby in ('minute', 'hour'): + rec.ks_goal_lines = False + return {'warning': { + 'title': _('Groupby Field aggregation'), + 'message': _( + 'Cannot create target lines when Group By Date field is set to have aggregation in ' + 'Minute and Hour case.') + }} + + @api.onchange('ks_chart_date_groupby', 'ks_chart_date_sub_groupby') + def ks_date_target(self): + for rec in self: + if (rec.ks_chart_date_groupby in ('minute', 'hour') or rec.ks_chart_date_sub_groupby in ('minute', 'hour')) \ + and rec.ks_goal_lines: + raise ValidationError(_( + "Cannot set aggregation having Date time (Hour, Minute) when target lines per date are being used." + " To proceed this, first delete target lines")) + if rec.ks_chart_relation_groupby.ttype == 'date' and rec.ks_chart_date_groupby in ('minute', 'hour'): + raise ValidationError(_('Groupby field: {} cannot be aggregated by {}').format( + rec.ks_chart_relation_groupby.display_name, rec.ks_chart_date_groupby)) + if rec.ks_chart_relation_sub_groupby.ttype == 'date' and rec.ks_chart_date_sub_groupby in ( + 'minute', 'hour'): + raise ValidationError(_('Groupby field: {} cannot be aggregated by {}').format( + rec.ks_chart_relation_sub_groupby.display_name, rec.ks_chart_date_sub_groupby)) + + def copy_data(self, default=None): + if default is None: + default = {} + if 'ks_action_lines' not in default: + default['ks_action_lines'] = [(0, 0, line.copy_data()[0]) for line in self.ks_action_lines] + + if 'ks_goal_lines' not in default: + default['ks_goal_lines'] = [(0, 0, line.copy_data()[0]) for line in self.ks_goal_lines] + if 'ks_multiplier_lines' not in default: + default['ks_multiplier_lines'] = [(0, 0, line.copy_data()[0]) for line in self.ks_multiplier_lines] + ks_many2many_field_ordering = self.ks_many2many_field_ordering + ks_list_view_group_fields = [] + ks_list_view_fields = [] + ks_chart_measure_field = [] + ks_chart_measure_field_2 = [] + if ks_many2many_field_ordering: + ks_many2many_field_ordering = json.loads(ks_many2many_field_ordering) + ks_list_view_group_fields = ks_many2many_field_ordering.get('ks_list_view_group_fields', False) + ks_list_view_fields = ks_many2many_field_ordering.get('ks_list_view_fields', False) + ks_chart_measure_field = ks_many2many_field_ordering.get('ks_chart_measure_field', False) + ks_chart_measure_field_2 = ks_many2many_field_ordering.get('ks_chart_measure_field_2', False) + if 'ks_list_view_group_fields' not in default: + default['ks_list_view_group_fields'] = ks_list_view_group_fields + if 'ks_list_view_fields' not in default: + default['ks_list_view_fields'] = ks_list_view_fields + if 'ks_chart_measure_field' not in default: + default['ks_chart_measure_field'] = ks_chart_measure_field + if 'ks_chart_measure_field_2' not in default: + default['ks_chart_measure_field_2'] = ks_chart_measure_field_2 + return super(KsDashboardNinjaItems, self).copy_data(default) + + def copy(self, default=None): + default = default or {} + res = super(KsDashboardNinjaItems, self).copy(default) + + if self.ks_dn_header_lines: + for line in self.ks_dn_header_lines: + ks_line = {} + ks_line['ks_to_do_header'] = line.ks_to_do_header + ks_line['ks_dn_item_id'] = res.id + ks_dn_header_id = self.env['ks_to.do.headers'].create(ks_line) + if line.ks_to_do_description_lines: + for ks_task in line.ks_to_do_description_lines: + ks_task_line = { + 'ks_to_do_header_id': ks_dn_header_id.id, + 'ks_description': ks_task.ks_description, + 'ks_active': ks_task.ks_active + } + + self.env['ks_to.do.description'].create(ks_task_line) + return res + + def name_get(self): + res = [] + for rec in self: + name = rec.name + if not name: + name = rec.ks_model_id.name + res.append((rec.id, name)) + + return res + + @api.model_create_multi + def create(self, values): + """ Override to save list view fields ordering """ + for i in range(len(values)): + if not values[i].get('ks_many2many_field_ordering', False): + ks_list_view_group_fields_name = [] + ks_list_view_fields_name = [] + ks_chart_measure_field_name = [] + ks_chart_measure_field_2_name = [] + if values[i].get('ks_list_view_group_fields', False) and len(values[i]['ks_list_view_group_fields'][0][2]) > 0: + for measure in values[i]['ks_list_view_group_fields'][0][2]: + ks_measure_id = self.env['ir.model.fields'].search( + [('id', '=', measure)]) + ks_list_view_group_fields_name.append(ks_measure_id.name) + if values[i].get('ks_list_view_fields', False) and len(values[i]['ks_list_view_fields'][0][2]) > 0: + for measure in values[i]['ks_list_view_fields'][0][2]: + ks_measure_id = self.env['ir.model.fields'].search( + [('id', '=', measure)]) + ks_list_view_fields_name.append(ks_measure_id.name) + if values[i].get('ks_chart_measure_field', False) and len(values[i]['ks_chart_measure_field'][0][2]) > 0: + for measure in values[i]['ks_chart_measure_field'][0][2]: + ks_measure_id = self.env['ir.model.fields'].search( + [('id', '=', measure)]) + ks_chart_measure_field_name.append(ks_measure_id.name) + if values[i].get('ks_chart_measure_field_2', False) and len(values[i]['ks_chart_measure_field_2'][0][2]) > 0: + for measure in values[i]['ks_chart_measure_field_2'][0][2]: + ks_measure_id = self.env['ir.model.fields'].search( + [('id', '=', measure)]) + ks_chart_measure_field_2_name.append(ks_measure_id.name) + ks_many2many_field_ordering = { + 'ks_list_view_fields': values[i]['ks_list_view_fields'][0][2] if values[i].get('ks_list_view_fields', False) else [], + 'ks_list_view_fields_name': ks_list_view_fields_name, + 'ks_list_view_group_fields': values[i]['ks_list_view_group_fields'][0][2] if values[i].get('ks_list_view_group_fields', False) else [], + 'ks_list_view_group_fields_name': ks_list_view_group_fields_name , + 'ks_chart_measure_field': values[i]['ks_chart_measure_field'][0][2] if values[i].get('ks_chart_measure_field', False) else [], + 'ks_chart_measure_field_name': ks_chart_measure_field_name, + 'ks_chart_measure_field_2': values[i]['ks_chart_measure_field_2'][0][2] if values[i].get('ks_chart_measure_field_2', False) else [], + 'ks_chart_measure_field_2_name': ks_chart_measure_field_2_name, + } + values[i]['ks_many2many_field_ordering'] = json.dumps(ks_many2many_field_ordering) + seq = self.env['ir.sequence'].next_by_code('ks_dashboard_ninja.item') or 'New' + values[0]['name_seq'] = seq + return super(KsDashboardNinjaItems, self).create( + values) + + @api.onchange('ks_list_view_fields') + def ks_list_view_fields_onchange(self): + ks_many2many_field_ordering = {} + for rec in self: + if rec.ks_many2many_field_ordering: + ks_many2many_field_ordering = json.loads(rec.ks_many2many_field_ordering) + ks_many2many_field_ordering['ks_list_view_fields'] = rec.ks_list_view_fields.ids + ks_many2many_field_ordering['ks_list_view_fields_name'] = [x.name for x in rec.ks_list_view_fields] + + rec.ks_many2many_field_ordering = json.dumps(ks_many2many_field_ordering) + + @api.onchange('ks_list_view_group_fields') + def ks_list_view_group_fields_onchange(self): + ks_many2many_field_ordering = {} + for rec in self: + if rec.ks_many2many_field_ordering: + ks_many2many_field_ordering = json.loads(rec.ks_many2many_field_ordering) + ks_many2many_field_ordering['ks_list_view_group_fields'] = rec.ks_list_view_group_fields.ids + ks_many2many_field_ordering['ks_list_view_group_fields_name'] = [x.name for x in rec.ks_list_view_group_fields] + rec.ks_many2many_field_ordering = json.dumps(ks_many2many_field_ordering) + + @api.onchange('ks_chart_measure_field') + def ks_chart_measure_field_onchange(self): + for rec in self: + ks_many2many_field_ordering = {} + if rec.ks_many2many_field_ordering: + ks_many2many_field_ordering = json.loads(rec.ks_many2many_field_ordering) + ks_many2many_field_ordering['ks_chart_measure_field'] = rec.ks_chart_measure_field.ids + ks_many2many_field_ordering['ks_chart_measure_field_name'] = [x.name for x in + rec.ks_chart_measure_field] + rec.ks_many2many_field_ordering = json.dumps(ks_many2many_field_ordering) + + @api.onchange('ks_chart_measure_field_2') + def ks_chart_measure_field_2_onchange(self): + ks_many2many_field_ordering = {} + for rec in self: + if rec.ks_many2many_field_ordering: + ks_many2many_field_ordering = json.loads(rec.ks_many2many_field_ordering) + ks_many2many_field_ordering['ks_chart_measure_field_2'] = rec.ks_chart_measure_field_2.ids + ks_many2many_field_ordering['ks_chart_measure_field_2_name'] = [x.name for x in + rec.ks_chart_measure_field_2] + rec.ks_many2many_field_ordering = json.dumps(ks_many2many_field_ordering) + + + + @api.onchange('ks_layout','ks_dashboard_item_theme') + def layout_four_font_change(self): + if self.ks_dashboard_item_theme != "white": + if self.ks_layout == 'layout4' and self.ks_dashboard_item_theme in ['red','blue','yellow','green']: + self.ks_font_color = '#E7495E,0.99' + self.ks_default_icon_color = "#6789C6,0.99" + elif self.ks_layout == 'layout4' and self.ks_dashboard_item_theme not in ['red','blue','yellow','green']: + self.ks_font_color = '#000000,0.99' + if self.ks_background_color=="#DAEAF6,0.99": + self.ks_default_icon_color="#000000,0.99" + else: + self.ks_default_icon_color = "#000000,0.99" + elif self.ks_layout != 'layout4' and self.ks_dashboard_item_theme not in ['red', 'blue', 'yellow', 'green']: + self.ks_font_color = "#000000,0.99" + elif self.ks_layout == 'layout6': + self.ks_font_color = "#737791,0.99" + self.ks_default_icon_color = "#737791,0.99" + elif self.ks_layout == 'layout3': + self.ks_font_color = "#6789C6,0.99" + else: + self.ks_default_icon_color = "#6789C6,0.99" + self.ks_font_color = "#000000,0.99" + elif self.ks_dashboard_item_type == 'ks_tile' and self.ks_layout == 'layout6': + self.ks_font_color = "#737791,0.99" + self.ks_default_icon_color = "#737791,0.99" + else: + if self.ks_layout == 'layout4': + self.ks_background_color = "#DAEAF6,0.99" + self.ks_font_color = "#E7495E,0.99" + self.ks_default_icon_color = "#6789C6,0.99" + elif self.ks_layout == 'layout3': + self.ks_font_color = "#6789C6,0.99" + else: + self.ks_background_color = "#DAEAF6,0.99" + self.ks_font_color = "#000000,0.99" + self.ks_default_icon_color = "#6789C6,0.99" + + # To convert color into 10% darker. Percentage amount is hardcoded. Change amt if want to change percentage. + def ks_get_dark_color(self, color, opacity): + num = int(color[1:], 16) + amt = -25 + R = (num >> 16) + amt + R = (255 if R > 255 else 0 if R < 0 else R) * 0x10000 + G = (num >> 8 & 0x00FF) + amt + G = (255 if G > 255 else 0 if G < 0 else G) * 0x100 + B = (num & 0x0000FF) + amt + B = (255 if B > 255 else 0 if B < 0 else B) + return "#" + hex(0x1000000 + R + G + B).split('x')[1][1:] + "," + opacity + + @api.onchange('ks_model_id') + def make_record_field_empty(self): + for rec in self: + rec.ks_record_field = False + rec.ks_domain = False + rec.ks_date_filter_field = False + # To show "created on" by default on date filter field on model select. + if rec.ks_model_id: + datetime_field_list = rec.ks_date_filter_field.search( + [('model_id', '=', rec.ks_model_id.id), '|', ('ttype', '=', 'date'), + ('ttype', '=', 'datetime')]).read(['id', 'name']) + for field in datetime_field_list: + if field['name'] == 'create_date': + rec.ks_date_filter_field = field['id'] + else: + rec.ks_date_filter_field = False + # Pro + rec.ks_funnel_record_field = False + rec.ks_map_chart_relation_groupby = False + rec.ks_map_record_field = False + rec.ks_record_field = False + rec.ks_chart_measure_field = False + rec.ks_chart_measure_field_2 = False + rec.ks_chart_relation_sub_groupby = False + rec.ks_chart_relation_groupby = False + rec.ks_chart_date_sub_groupby = False + rec.ks_chart_date_groupby = False + rec.ks_sort_by_field = False + rec.ks_sort_by_order = False + rec.ks_record_data_limit = False + rec.ks_list_view_fields = False + rec.ks_list_view_group_fields = False + rec.ks_action_lines = False + rec.ks_actions = False + rec.ks_domain_extension = False + rec.ks_scatter_measure_x_id = False + rec.ks_scatter_measure_y_id = False + + @api.onchange('ks_record_count', 'ks_layout', 'name', 'ks_model_id', 'ks_domain', 'ks_icon_select', + 'ks_default_icon', 'ks_icon', + 'ks_background_color', 'ks_font_color', 'ks_default_icon_color') + def ks_preview_update(self): + self.ks_preview += 1 + + @api.onchange('ks_dashboard_item_theme') + def change_dashboard_item_theme(self): + if self.ks_dashboard_item_theme == "red": + self.ks_background_color = "#DCFCE7,0.99" + if self.ks_dashboard_item_type == 'ks_tile': + self.ks_default_icon_color = "#6789C6,0.99" + self.ks_font_color = "#000000,0.99" + elif self.ks_layout == 'layout3': + self.ks_font_color = "#6789C6,0.99" + else: + self.ks_default_icon_color = "#000000,0.99" + self.ks_font_color = "#000000,0.99" + self.ks_button_color = "#000000,0.99" + elif self.ks_dashboard_item_theme == "blue": + self.ks_background_color = "#FFF4DE,0.99" + if self.ks_dashboard_item_type == 'ks_tile': + self.ks_default_icon_color = "#6789C6,0.99" + self.ks_font_color = "#000000,0.99" + elif self.ks_layout == 'layout3': + self.ks_font_color = "#6789C6,0.99" + else: + self.ks_default_icon_color = "#000000,0.99" + self.ks_font_color = "#000000,0.99" + self.ks_button_color = "#000000,0.99" + elif self.ks_dashboard_item_theme == "yellow": + self.ks_background_color = "#F3E8FF,0.99" + if self.ks_dashboard_item_type == 'ks_tile': + self.ks_default_icon_color = "#6789C6,0.99" + self.ks_font_color = "##E7495E,0.99" + elif self.ks_layout == 'layout3': + self.ks_font_color = "#6789C6,0.99" + else: + self.ks_default_icon_color = "#000000,0.99" + self.ks_font_color = "#000000,0.99" + self.ks_button_color = "#000000,0.99" + elif self.ks_dashboard_item_theme == "green": + self.ks_background_color = "#FFE2E5,0.99" + if self.ks_dashboard_item_type == 'ks_tile': + self.ks_default_icon_color = "#6789C6,0.99" + self.ks_font_color = "#000000,0.99" + elif self.ks_layout == 'layout3': + self.ks_font_color = "#6789C6,0.99" + else: + self.ks_default_icon_color = "#000000,0.99" + self.ks_font_color = "#000000,0.99" + self.ks_button_color = "#000000,0.99" + elif self.ks_dashboard_item_theme == "white": + if self.ks_layout == 'layout4': + self.ks_background_color = "#DAEAF6,0.99" + self.ks_default_icon_color = "#6789C6,0.99" + self.ks_font_color = "#E7495E,0.99" + self.ks_button_color = "#6789C6,0.99" + elif self.ks_layout == 'layout3': + self.ks_font_color = "#6789C6,0.99" + self.ks_button_color = "#000000,0.99" + else: + self.ks_background_color = "#DAEAF6,0.99" + self.ks_default_icon_color = "#6789C6,0.99" + self.ks_font_color = "#000000,0.99" + self.ks_button_color = "#000000,0.99" + + if self.ks_layout == 'layout4': + self.ks_font_color = "#DAEAF6,0.99" + self.ks_button_color = "#000000,0.99" + + elif self.ks_dashboard_item_type == 'ks_tile' and self.ks_layout == 'layout6': + self.ks_default_icon_color = "#000000,0.99" + if self.ks_dashboard_item_theme == "white": + self.ks_default_icon_color = "#000000,0.99" + + @api.depends('ks_record_count_type', 'ks_model_id', 'ks_domain', 'ks_record_field', 'ks_date_filter_field', + 'ks_item_end_date', 'ks_item_start_date', 'ks_compare_period', 'ks_year_period', + 'ks_dashboard_item_type', 'ks_domain_extension', 'ks_data_format') + def ks_get_record_count(self): + for rec in self: + rec.ks_record_count = rec._ksGetRecordCount(domain=[]) + + def unlink(self): + channel = self.env['discuss.channel'].search([('ks_dashboard_item_id', 'in', self.ids)]) + if channel: + channel.unlink() + return super(KsDashboardNinjaItems, self).unlink() + + def _ksGetRecordCount(self, domain=[]): + rec = self + if rec.ks_record_count_type == 'count' or rec.ks_dashboard_item_type == 'ks_list_view': + ks_record_count = rec.ks_fetch_model_data(rec.ks_model_name, rec.ks_domain, 'search_count', rec, domain) + elif rec.ks_record_count_type in ['sum', + 'average'] and rec.ks_record_field and rec.ks_dashboard_item_type != 'ks_list_view': + ks_records_grouped_data = rec.ks_fetch_model_data(rec.ks_model_name, rec.ks_domain, 'read_group', rec, + domain) + if ks_records_grouped_data and len(ks_records_grouped_data) > 0: + ks_records_grouped_data = ks_records_grouped_data[0] + if rec.ks_record_count_type == 'sum' and ks_records_grouped_data.get('__count', False) and ( + ks_records_grouped_data.get(rec.ks_record_field.name)): + ks_record_count = ks_records_grouped_data.get(rec.ks_record_field.name, 0) + elif rec.ks_record_count_type == 'average' and ks_records_grouped_data.get( + '__count', False) and (ks_records_grouped_data.get(rec.ks_record_field.name)): + ks_record_count = ks_records_grouped_data.get(rec.ks_record_field.name, + 0) / ks_records_grouped_data.get('__count', + 1) + else: + ks_record_count = 0 + else: + ks_record_count = 0 + else: + ks_record_count = 0 + return ks_record_count + + # Writing separate function to fetch dashboard item data + def ks_fetch_model_data(self, ks_model_name, ks_domain, ks_func, rec, domain=[]): + data = 0 + try: + if ks_domain and ks_domain != '[]' and ks_model_name: + proper_domain = self.ks_convert_into_proper_domain(ks_domain, rec, domain) + if ks_func == 'search_count': + data = self.env[ks_model_name].search_count(proper_domain) + elif ks_func == 'read_group': + data = self.env[ks_model_name].read_group(proper_domain, [rec.ks_record_field.name], [], lazy=False) + elif ks_model_name: + # Have to put extra if condition here because on load,model giving False value + proper_domain = self.ks_convert_into_proper_domain(False, rec, domain) + if ks_func == 'search_count': + data = self.env[ks_model_name].search_count(proper_domain) + + elif ks_func == 'read_group': + data = self.env[ks_model_name].read_group(proper_domain, [rec.ks_record_field.name], [], lazy=False) + else: + return [] + except Exception as e: + return 0 + return data + + def ks_convert_into_proper_domain(self, ks_domain, rec, domain=[]): + if ks_domain and "%UID" in ks_domain: + ks_domain = ks_domain.replace('"%UID"', str(self.env.user.id)) + + if ks_domain and "%MYCOMPANY" in ks_domain: + ks_domain = ks_domain.replace('"%MYCOMPANY"', str(self.env.company.id)) + + ks_date_domain = False + if rec.ks_date_filter_field: + if not rec.ks_date_filter_selection or rec.ks_date_filter_selection == "l_none": + selected_start_date = self._context.get('ksDateFilterStartDate', False) + selected_end_date = self._context.get('ksDateFilterEndDate', False) + ks_is_def_custom_filter = self._context.get('ksIsDefultCustomDateFilter', False) + ks_timezone = self._context.get('tz') or self.env.user.tz + if selected_start_date and selected_end_date and rec.ks_date_filter_field.ttype == 'datetime' and not ks_is_def_custom_filter: + selected_start_date = ks_convert_into_utc(selected_start_date, ks_timezone) + selected_end_date = ks_convert_into_utc(selected_end_date, ks_timezone) + if selected_start_date and selected_end_date and rec.ks_date_filter_field.ttype == 'date' and ks_is_def_custom_filter: + selected_start_date = ks_convert_into_local(selected_start_date, ks_timezone) + selected_end_date = ks_convert_into_local(selected_end_date, ks_timezone) + + if self._context.get('ksDateFilterSelection', False) and self._context['ksDateFilterSelection'] not in [ + 'l_none', 'l_custom']: + ks_date_data = ks_get_date(self._context.get('ksDateFilterSelection'), self, + rec.ks_date_filter_field.ttype) + selected_start_date = ks_date_data["selected_start_date"] + selected_end_date = ks_date_data["selected_end_date"] + + if selected_end_date and not selected_start_date: + ks_date_domain = [ + (rec.ks_date_filter_field.name, "<=", + selected_end_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT))] + elif selected_start_date and not selected_end_date: + ks_date_domain = [ + (rec.ks_date_filter_field.name, ">=", + selected_start_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT))] + else: + if selected_end_date and selected_start_date: + ks_date_domain = [ + (rec.ks_date_filter_field.name, ">=", + selected_start_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT)), + (rec.ks_date_filter_field.name, "<=", + selected_end_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT))] + + else: + if rec.ks_date_filter_selection and rec.ks_date_filter_selection != 'l_custom': + ks_date_data = ks_get_date(rec.ks_date_filter_selection, self, rec.ks_date_filter_field.ttype) + selected_start_date = ks_date_data["selected_start_date"] + selected_end_date = ks_date_data["selected_end_date"] + else: + selected_start_date = False + selected_end_date = False + if rec.ks_item_start_date or rec.ks_item_end_date: + selected_start_date = rec.ks_item_start_date + selected_end_date = rec.ks_item_end_date + if rec.ks_date_filter_field.ttype == 'date' and rec.ks_item_start_date and rec.ks_item_end_date: + ks_timezone = self._context.get('tz') or self.env.user.tz + selected_start_date = ks_convert_into_local(rec.ks_item_start_date, ks_timezone) + selected_end_date = ks_convert_into_local(rec.ks_item_end_date, ks_timezone) + + if selected_start_date and selected_end_date: + if rec.ks_compare_period: + ks_compare_period = abs(rec.ks_compare_period) + if ks_compare_period > 100: + ks_compare_period = 100 + if rec.ks_compare_period > 0: + selected_end_date = selected_end_date + ( + selected_end_date - selected_start_date) * ks_compare_period + if rec.ks_date_filter_field.ttype == "date" and rec.ks_date_filter_selection == 'l_day': + selected_end_date = selected_end_date + timedelta(days=ks_compare_period) + elif rec.ks_compare_period < 0: + selected_start_date = selected_start_date - ( + selected_end_date - selected_start_date) * ks_compare_period + if rec.ks_date_filter_field.ttype == "date" and rec.ks_date_filter_selection == 'l_day': + selected_start_date = selected_end_date - timedelta(days=ks_compare_period) + + if rec.ks_year_period and rec.ks_year_period != 0 and rec.ks_dashboard_item_type: + abs_year_period = abs(rec.ks_year_period) + sign_yp = rec.ks_year_period / abs_year_period + if abs_year_period > 100: + abs_year_period = 100 + date_field_name = rec.ks_date_filter_field.name + + ks_date_domain = ['&', (date_field_name, ">=", + fields.datetime.strftime(selected_start_date, + DEFAULT_SERVER_DATETIME_FORMAT)), + (date_field_name, "<=", + fields.datetime.strftime(selected_end_date, DEFAULT_SERVER_DATETIME_FORMAT))] + + for p in range(1, abs_year_period + 1): + ks_date_domain.insert(0, '|') + ks_date_domain.extend(['&', (date_field_name, ">=", fields.datetime.strftime( + selected_start_date - relativedelta.relativedelta(years=p) * sign_yp, + DEFAULT_SERVER_DATETIME_FORMAT)), + (date_field_name, "<=", fields.datetime.strftime( + selected_end_date - relativedelta.relativedelta(years=p) + * sign_yp, DEFAULT_SERVER_DATETIME_FORMAT))]) + else: + selected_start_date = fields.datetime.strftime(selected_start_date, + DEFAULT_SERVER_DATETIME_FORMAT) + selected_end_date = fields.datetime.strftime(selected_end_date, DEFAULT_SERVER_DATETIME_FORMAT) + ks_date_domain = [(rec.ks_date_filter_field.name, ">=", selected_start_date), + (rec.ks_date_filter_field.name, "<=", selected_end_date)] + elif selected_start_date and not selected_end_date: + selected_start_date = fields.datetime.strftime(selected_start_date, DEFAULT_SERVER_DATETIME_FORMAT) + ks_date_domain = [(rec.ks_date_filter_field.name, ">=", selected_start_date)] + elif selected_end_date and not selected_start_date: + selected_end_date = fields.datetime.strftime(selected_end_date, DEFAULT_SERVER_DATETIME_FORMAT) + ks_date_domain = [(rec.ks_date_filter_field.name, "<=", selected_end_date)] + else: + ks_date_domain = [] + + proper_domain = safe_eval(ks_domain) if ks_domain else [] + if ks_date_domain: + proper_domain.extend(ks_date_domain) + if rec.ks_domain_extension: + ks_domain_extension = rec.ks_convert_domain_extension(rec.ks_domain_extension, rec) + proper_domain.extend(ks_domain_extension) + if domain: + proper_domain.extend(domain) + + return proper_domain + + def ks_convert_domain_extension(self, ks_extensiom_domain, rec): + if ks_extensiom_domain and "%UID" in ks_extensiom_domain: + ks_extensiom_domain = ks_extensiom_domain.replace('"%UID"', str(self.env.user.id)) + if "%UID" in ks_extensiom_domain: + ks_extensiom_domain = ks_extensiom_domain.replace("'%UID'", str(self.env.user.id)) + + if ks_extensiom_domain and "%MYCOMPANY" in ks_extensiom_domain: + ks_extensiom_domain = ks_extensiom_domain.replace('"%MYCOMPANY"', str(self.env.company.id)) + if "%MYCOMPANY" in ks_extensiom_domain: + ks_extensiom_domain = ks_extensiom_domain.replace("'%MYCOMPANY'", str(self.env.company.id)) + + ks_domain = safe_eval(ks_extensiom_domain) + return ks_domain + + @api.onchange('ks_domain_extension') + def ks_onchange_domain_extension(self): + if self.ks_domain_extension: + proper_domain = [] + try: + ks_domain_extension = self.ks_domain_extension + if "%UID" in ks_domain_extension: + ks_domain_extension = ks_domain_extension.replace("%UID", str(self.env.user.id)) + if "%MYCOMPANY" in ks_domain_extension: + ks_domain_extension = ks_domain_extension.replace("%MYCOMPANY", str(self.env.company.id)) + self.env[self.ks_model_name].search_count(safe_eval(ks_domain_extension)) + except Exception: + raise ValidationError( + "Domain Extension Syntax is wrong. \nProper Syntax Example :[[','','" + "']]") + + @api.constrains('ks_domain_extension') + def ks_check_domain_extension(self): + if self.ks_domain_extension: + proper_domain = [] + try: + ks_domain_extension = self.ks_domain_extension + if "%UID" in ks_domain_extension: + ks_domain_extension = ks_domain_extension.replace("%UID", str(self.env.user.id)) + if "%MYCOMPANY" in ks_domain_extension: + ks_domain_extension = ks_domain_extension.replace("%MYCOMPANY", str(self.env.company.id)) + self.env[self.ks_model_name].search_count(safe_eval(ks_domain_extension)) + except Exception: + raise ValidationError( + "Domain Extension Syntax is wrong. \nProper Syntax Example :[[',''," + "'']]") + + @api.onchange('ks_domain_extension_2') + def ks_onchange_domain_extension_2(self): + if self.ks_domain_extension_2: + proper_domain = [] + try: + ks_domain_extension = self.ks_domain_extension_2 + if "%UID" in ks_domain_extension: + ks_domain_extension = ks_domain_extension.replace("%UID", str(self.env.user.id)) + if "%MYCOMPANY" in ks_domain_extension: + ks_domain_extension = ks_domain_extension.replace("%MYCOMPANY", str(self.env.company.id)) + self.env[self.ks_model_name].search_count(safe_eval(ks_domain_extension)) + except Exception: + raise ValidationError( + "Domain Extension Syntax is wrong. \nProper Syntax Example :[[',''," + "'']]") + + @api.constrains('ks_domain_extension_2') + def ks_check_domain_extension_2(self): + if self.ks_domain_extension: + proper_domain = [] + try: + ks_domain_extension = self.ks_domain_extension + if "%UID" in ks_domain_extension: + ks_domain_extension = ks_domain_extension.replace("%UID", str(self.env.user.id)) + if "%MYCOMPANY" in ks_domain_extension: + ks_domain_extension = ks_domain_extension.replace("%MYCOMPANY", str(self.env.company.id)) + self.env[self.ks_model_name].search_count(safe_eval(ks_domain_extension)) + except Exception: + raise ValidationError( + "Domain Extension Syntax is wrong. \nProper Syntax Example :[[',''," + "'']]") + + @api.depends('ks_chart_relation_groupby') + def get_chart_groupby_type(self): + for rec in self: + if rec.ks_chart_relation_groupby.ttype == 'datetime' or rec.ks_chart_relation_groupby.ttype == 'date': + rec.ks_chart_groupby_type = 'date_type' + elif rec.ks_chart_relation_groupby.ttype == 'many2one': + rec.ks_chart_groupby_type = 'relational_type' + rec.ks_chart_date_groupby = False + elif rec.ks_chart_relation_groupby.ttype == 'selection': + rec.ks_chart_groupby_type = 'selection' + rec.ks_chart_date_groupby = False + else: + rec.ks_chart_groupby_type = 'other' + + @api.onchange('ks_chart_relation_groupby') + def ks_empty_sub_group_by(self): + for rec in self: + if not rec.ks_chart_relation_groupby or rec.ks_chart_groupby_type == "date_type" \ + and not rec.ks_chart_date_groupby: + rec.ks_chart_relation_sub_groupby = False + rec.ks_chart_date_sub_groupby = False + if not (rec.ks_chart_relation_groupby.ttype == 'datetime' or \ + rec.ks_chart_relation_groupby.ttype == 'date'): + rec.ks_goal_lines = False + rec.ks_goal_enable = False + rec.ks_fill_temporal = False + rec.ks_as_of_now = False + + @api.onchange('ks_chart_relation_sub_groupby', 'ks_fill_temporal','ks_as_of_now', 'ks_goal_lines') + def ks_empty_limit(self): + for rec in self: + if rec.ks_chart_relation_sub_groupby or rec.ks_fill_temporal or rec.ks_goal_lines: + rec.ks_record_data_limit = 0 + if rec.ks_chart_relation_sub_groupby: + rec.ks_chart_cumulative_field = False + rec.ks_fill_temporal = False + rec.ks_as_of_now = False + + @api.depends('ks_chart_relation_sub_groupby') + def get_chart_sub_groupby_type(self): + for rec in self: + if rec.ks_chart_relation_sub_groupby.ttype == 'datetime' or \ + rec.ks_chart_relation_sub_groupby.ttype == 'date': + rec.ks_chart_sub_groupby_type = 'date_type' + elif rec.ks_chart_relation_sub_groupby.ttype == 'many2one': + rec.ks_chart_sub_groupby_type = 'relational_type' + + elif rec.ks_chart_relation_sub_groupby.ttype == 'selection': + rec.ks_chart_sub_groupby_type = 'selection' + + else: + rec.ks_chart_sub_groupby_type = 'other' + + @api.depends('ks_chart_measure_field', 'ks_map_record_field', 'ks_funnel_record_field', 'ks_chart_cumulative_field', 'ks_chart_relation_groupby', + 'ks_chart_date_groupby', 'ks_domain', + 'ks_dashboard_item_type', 'ks_model_id', 'ks_sort_by_field', 'ks_sort_by_order', + 'ks_record_data_limit', 'ks_chart_data_count_type', 'ks_chart_measure_field_2', 'ks_goal_enable', + 'ks_standard_goal_value', 'ks_goal_bar_line', 'ks_chart_relation_sub_groupby', + 'ks_chart_date_sub_groupby', 'ks_date_filter_field', 'ks_item_start_date', 'ks_item_end_date', + 'ks_compare_period', 'ks_year_period', 'ks_unit', 'ks_unit_selection', 'ks_chart_unit', + 'ks_fill_temporal', 'ks_domain_extension', 'ks_multiplier_active', 'ks_multiplier_lines', + 'ks_scatter_measure_x_id','ks_map_chart_relation_groupby') + def ks_get_chart_data(self): + for rec in self: + if rec.ks_dashboard_item_type == "ks_funnel_chart": + rec.ks_sort_by_order = "DESC" + rec.ks_sort_by_field = rec.ks_funnel_record_field + rec.ks_chart_relation_sub_groupby = False + rec.ks_chart_measure_field = rec.ks_funnel_record_field + rec.ks_chart_data = rec._ks_get_chart_data(domain=[]) + elif rec.ks_dashboard_item_type == "ks_map_view": + rec.ks_chart_measure_field = rec.ks_map_record_field + rec.ks_chart_relation_groupby = rec.ks_map_chart_relation_groupby + rec.ks_chart_data = rec._ks_get_chart_data(domain=[]) + elif rec.ks_dashboard_item_type == "ks_scatter_chart": + rec.ks_chart_relation_groupby = rec.ks_scatter_measure_x_id + # rec.ks_chart_relation_groupby = rec.ks_scatter_measure_y_id + rec.ks_chart_data = rec._ks_get_chart_data(domain=[]) + else: + rec.ks_chart_data = rec._ks_get_chart_data(domain=[]) + + def _ks_get_chart_data(self, domain=[]): + rec = self + if rec.ks_dashboard_item_type and rec.ks_dashboard_item_type != 'ks_tile' and \ + rec.ks_dashboard_item_type != 'ks_list_view' and rec.ks_model_id and rec.ks_chart_data_count_type: + ks_chart_data = {'labels': [], 'datasets': [], 'ks_currency': 0, 'ks_field': "", 'ks_selection': "", + 'ks_show_second_y_scale': False, 'domains': [], } + ks_chart_measure_field = [] + ks_chart_measure_field_with_type = [] + ks_chart_measure_field_ids = [] + ks_chart_measure_field_2 = [] + ks_chart_measure_field_with_type_2 = [] + ks_chart_measure_field_2_ids = [] + + if rec.ks_unit and rec.ks_unit_selection == 'monetary': + ks_chart_data['ks_selection'] += rec.ks_unit_selection + ks_chart_data['ks_currency'] += rec.env.user.company_id.currency_id.id + elif rec.ks_unit and rec.ks_unit_selection == 'custom': + ks_chart_data['ks_selection'] += rec.ks_unit_selection + if rec.ks_chart_unit: + ks_chart_data['ks_field'] += rec.ks_chart_unit + + # If count chart data type: + if rec.ks_chart_data_count_type == "count": + rec.ks_chart_measure_field = False + rec.ks_chart_measure_field_2 = False + if not rec.ks_sort_by_field: + ks_chart_measure_field_with_type.append('count:count(id)') + elif rec.ks_sort_by_field: + if rec.ks_sort_by_field.ttype == "many2one" and rec.ks_sort_by_field.name == rec.ks_chart_relation_groupby.name: + ks_chart_measure_field_with_type.append(rec.ks_sort_by_field.name) + elif not rec.ks_sort_by_field.ttype in ["datetime",'date']: + ks_chart_measure_field_with_type.append(rec.ks_sort_by_field.name + ':' + 'sum') + else: + ks_chart_measure_field_with_type.append(rec.ks_sort_by_field.name) + + ks_chart_data['datasets'].append({'data': [], 'label': "Count"}) + else: + if rec.ks_dashboard_item_type == 'ks_bar_chart': + if rec.ks_chart_measure_field_2: + ks_chart_data['ks_show_second_y_scale'] = True + + for res in rec.ks_chart_measure_field_2: + if rec.ks_chart_data_count_type == 'sum': + ks_data_count_type = 'sum' + elif rec.ks_chart_data_count_type == 'average': + ks_data_count_type = 'avg' + else: + raise ValidationError(_('Please chose any Data Type!')) + ks_chart_measure_field_2.append(res.name) + ks_chart_measure_field_with_type_2.append(res.name + ':' + ks_data_count_type) + ks_chart_measure_field_2_ids.append(res.id) + ks_chart_data['datasets'].append( + {'data': [], 'label': res.field_description, 'type': 'line', 'yAxisID': 'y-axis-1'}) + + for res in range(0, len(rec.ks_chart_measure_field)): + if rec.ks_chart_data_count_type == 'sum': + ks_data_count_type = 'sum' + elif rec.ks_chart_data_count_type == 'average': + ks_data_count_type = 'avg' + else: + raise ValidationError(_('Please chose any Data Type!')) + ks_chart_measure_field_with_type.append( + rec.ks_chart_measure_field[res].name + ':' + ks_data_count_type) + ks_chart_measure_field.append(rec.ks_chart_measure_field[res].name) + ks_chart_measure_field_ids.append(rec.ks_chart_measure_field[res].ids[0]) + + if len(rec.ks_chart_cumulative_field) > len(rec.ks_chart_measure_field): + rec.ks_chart_cumulative_field = rec.ks_chart_measure_field + + if rec.ks_chart_cumulative_field and res < len(rec.ks_chart_cumulative_field) and \ + (rec.ks_chart_cumulative_field[res].id or rec.ks_chart_cumulative_field[res].id.origin) in rec.ks_chart_measure_field.ids: + + ks_chart_data['datasets'].append( + {'data': [], 'label': rec.ks_chart_cumulative_field[res].field_description, + 'ks_chart_cumulative_field': True, 'ks_as_of_now': rec.ks_as_of_now}) + else: + ks_chart_data['datasets'].append( + {'data': [], 'label': rec.ks_chart_measure_field[res].field_description, + 'ks_chart_cumulative_field': False, 'ks_as_of_now': rec.ks_as_of_now}) + + # ks_chart_measure_field = [res.name for res in rec.ks_chart_measure_field] + ks_chart_groupby_relation_field = rec.ks_chart_relation_groupby.name + ks_chart_domain = self.ks_convert_into_proper_domain(rec.ks_domain, rec, domain) + ks_chart_data['previous_domain'] = ks_chart_domain + if rec.ks_chart_data_count_type == "count" and not self.ks_fill_temporal and not rec.ks_sort_by_field: + orderby = 'count' + else: + orderby = rec.ks_sort_by_field.name if rec.ks_sort_by_field else False + if rec.ks_sort_by_order and orderby : + orderby = orderby + " " + rec.ks_sort_by_order + limit = rec.ks_record_data_limit if rec.ks_record_data_limit and rec.ks_record_data_limit > 0 else 5000 + if rec.ks_as_of_now: + limit=5000 + + if ((rec.ks_chart_data_count_type != "count" and ks_chart_measure_field) or ( + rec.ks_chart_data_count_type == "count" and not ks_chart_measure_field)) \ + and not rec.ks_chart_relation_sub_groupby: + if rec.ks_chart_relation_groupby.ttype == 'date' and rec.ks_chart_date_groupby in ( + 'minute', 'hour'): + raise ValidationError(_('Groupby field: {} cannot be aggregated by {}').format( + rec.ks_chart_relation_groupby.display_name, rec.ks_chart_date_groupby)) + ks_chart_date_groupby = 'day' + elif rec.ks_chart_date_groupby == 'month_year': + ks_chart_date_groupby = 'month' + else: + ks_chart_date_groupby = rec.ks_chart_date_groupby + + if (rec.ks_chart_groupby_type == 'date_type' and rec.ks_chart_date_groupby) or \ + rec.ks_chart_groupby_type != 'date_type': + ks_chart_data = rec.ks_fetch_chart_data(rec.ks_model_name, ks_chart_domain, + ks_chart_measure_field_with_type, + ks_chart_measure_field_with_type_2, + ks_chart_measure_field, + ks_chart_measure_field_2, + ks_chart_groupby_relation_field, + ks_chart_date_groupby, + rec.ks_chart_groupby_type, orderby, limit, + rec.ks_chart_data_count_type, + ks_chart_measure_field_ids, + ks_chart_measure_field_2_ids, + rec.ks_chart_relation_groupby.id, ks_chart_data) + + if rec.ks_chart_groupby_type == 'date_type' and rec.ks_goal_enable and rec.ks_dashboard_item_type in [ + 'ks_bar_chart', 'ks_horizontalBar_chart', 'ks_line_chart', + 'ks_area_chart'] and rec.ks_chart_groupby_type == "date_type": + + if rec._context.get('current_id', False): + ks_item_id = rec._context['current_id'] + else: + ks_item_id = rec.id + + if rec.ks_date_filter_selection == "l_none": + selected_start_date = rec._context.get('ksDateFilterStartDate', False) + selected_end_date = rec._context.get('ksDateFilterEndDate', False) + + else: + if rec.ks_date_filter_selection == "l_custom": + selected_start_date = rec.ks_item_start_date + selected_end_date = rec.ks_item_end_date + else: + ks_date_data = ks_get_date(rec.ks_date_filter_selection, self, + rec.ks_date_filter_field.ttype) + selected_start_date = ks_date_data["selected_start_date"] + selected_end_date = ks_date_data["selected_end_date"] + + if selected_start_date and selected_end_date: + selected_start_date = selected_start_date.strftime('%Y-%m-%d') + selected_end_date = selected_end_date.strftime('%Y-%m-%d') + ks_goal_domain = [('ks_dashboard_item', '=', ks_item_id)] + + if selected_start_date and selected_end_date: + ks_goal_domain.extend([('ks_goal_date', '>=', selected_start_date.split(" ")[0]), + ('ks_goal_date', '<=', selected_end_date.split(" ")[0])]) + + ks_date_data = rec.ks_get_start_end_date(rec.ks_model_name, ks_chart_groupby_relation_field, + rec.ks_chart_relation_groupby.ttype, + ks_chart_domain, + ks_goal_domain) + + labels = [] + if rec.ks_chart_date_groupby == 'month_year': + ks_chart_date_groupby = 'month' + else: + ks_chart_date_groupby = rec.ks_chart_date_groupby + if ks_date_data['start_date'] and ks_date_data['end_date'] and rec.ks_goal_lines: + labels = self.generate_timeserise(ks_date_data['start_date'], ks_date_data['end_date'], + ks_chart_date_groupby) + + try: + ks_goal_records = self.env['ks_dashboard_ninja.item_goal'].read_group( + ks_goal_domain, ['ks_goal_value'], + ['ks_goal_date' + ":" + ks_chart_date_groupby], lazy=False) + except: + ks_goal_records = [] + ks_goal_labels = [] + ks_goal_dataset = [] + goal_dataset = [] + + if rec.ks_goal_lines and len(rec.ks_goal_lines) != 0: + ks_goal_domains = {} + for res in ks_goal_records: + if res['ks_goal_date' + ":" + ks_chart_date_groupby]: + ks_goal_labels.append(res['ks_goal_date' + ":" + ks_chart_date_groupby]) + ks_goal_dataset.append(res['ks_goal_value']) + ks_goal_domains[res['ks_goal_date' + ":" + ks_chart_date_groupby]] = res[ + '__domain'] + + for goal_domain in ks_goal_domains.keys(): + ks_goal_doamins = [] + for item in ks_goal_domains[goal_domain]: + + if 'ks_goal_date' in item: + domain = list(item) + domain[0] = ks_chart_groupby_relation_field + domain = tuple(domain) + ks_goal_doamins.append(domain) + ks_goal_doamins.insert(0, '&') + ks_goal_domains[goal_domain] = ks_goal_doamins + + domains = {} + counter = 0 + for label in ks_chart_data['labels']: + domains[label] = ks_chart_data['domains'][counter] + counter += 1 + + ks_chart_records_dates = ks_chart_data['labels'] + list( + set(ks_goal_labels) - set(ks_chart_data['labels'])) + + ks_chart_records = [] + for label in labels: + if label in ks_chart_records_dates: + ks_chart_records.append(label) + + ks_chart_data['domains'].clear() + datasets = [] + for dataset in ks_chart_data['datasets']: + datasets.append(dataset['data'].copy()) + + for dataset in ks_chart_data['datasets']: + dataset['data'].clear() + + for label in ks_chart_records: + domain = domains.get(label, False) + if domain: + ks_chart_data['domains'].append(domain) + else: + ks_chart_data['domains'].append(ks_goal_domains.get(label, [])) + counterr = 0 + if label in ks_chart_data['labels']: + index = ks_chart_data['labels'].index(label) + + for dataset in ks_chart_data['datasets']: + dataset['data'].append(datasets[counterr][index]) + counterr += 1 + + else: + for dataset in ks_chart_data['datasets']: + dataset['data'].append(0.00) + + if label in ks_goal_labels: + index = ks_goal_labels.index(label) + goal_dataset.append(ks_goal_dataset[index]) + else: + goal_dataset.append(0.00) + + ks_chart_data['labels'] = ks_chart_records + else: + if rec.ks_standard_goal_value: + length = len(ks_chart_data['datasets'][0]['data']) + for i in range(length): + goal_dataset.append(rec.ks_standard_goal_value) + ks_goal_datasets = { + 'label': 'Target', + 'data': goal_dataset, + 'ks_as_of_now': False + } + if rec.ks_goal_bar_line: + ks_goal_datasets['type'] = 'line' + ks_chart_data['datasets'].insert(0, ks_goal_datasets) + else: + ks_chart_data['datasets'].append(ks_goal_datasets) + + elif rec.ks_chart_relation_sub_groupby and ((rec.ks_chart_sub_groupby_type == 'relational_type') or + (rec.ks_chart_sub_groupby_type == 'selection') or + (rec.ks_chart_sub_groupby_type == 'date_type' and + rec.ks_chart_date_sub_groupby) or + (rec.ks_chart_sub_groupby_type == 'other')): + if rec.ks_chart_relation_sub_groupby.ttype == 'date': + if rec.ks_chart_date_sub_groupby in ('minute', 'hour'): + raise ValidationError(_('Sub Groupby field: {} cannot be aggregated by {}').format( + rec.ks_chart_relation_sub_groupby.display_name, rec.ks_chart_date_sub_groupby)) + if rec.ks_chart_date_groupby in ('minute', 'hour'): + raise ValidationError(_('Groupby field: {} cannot be aggregated by {}').format( + rec.ks_chart_relation_sub_groupby.display_name, rec.ks_chart_date_groupby)) + # doesn't have time in date + ks_chart_date_sub_groupby = rec.ks_chart_date_sub_groupby + ks_chart_date_groupby = rec.ks_chart_date_groupby + else: + ks_chart_date_sub_groupby = rec.ks_chart_date_sub_groupby + if rec.ks_chart_date_groupby == 'month_year': + ks_chart_date_groupby = 'month' + else: + ks_chart_date_groupby = rec.ks_chart_date_groupby + if len(ks_chart_measure_field) != 0 or rec.ks_chart_data_count_type == 'count': + if rec.ks_chart_groupby_type == 'date_type' and ks_chart_date_groupby: + ks_chart_group = rec.ks_chart_relation_groupby.name + ":" + ks_chart_date_groupby + else: + ks_chart_group = rec.ks_chart_relation_groupby.name + + if rec.ks_chart_sub_groupby_type == 'date_type' and rec.ks_chart_date_sub_groupby: + ks_chart_sub_groupby_field = rec.ks_chart_relation_sub_groupby.name + ":" + \ + ks_chart_date_sub_groupby + else: + ks_chart_sub_groupby_field = rec.ks_chart_relation_sub_groupby.name + + ks_chart_groupby_relation_fields = [ks_chart_group, ks_chart_sub_groupby_field] + ks_chart_record = False + try: + ks_chart_record = self.env[rec.ks_model_name].read_group(ks_chart_domain, + list(set( + ks_chart_measure_field_with_type + + ks_chart_measure_field_with_type_2 + + [ + ks_chart_groupby_relation_field, + rec.ks_chart_relation_sub_groupby.name])), + ks_chart_groupby_relation_fields,orderby=orderby, + limit=limit, + lazy=False) + except Exception: + ks_chart_record = {} + chart_data = [] + chart_sub_data = [] + for res in ks_chart_record: + domain = res.get('__domain', []) + if res.get(ks_chart_groupby_relation_fields[0], False): + if rec.ks_chart_groupby_type == 'date_type': + # x-axis modification + if rec.ks_chart_date_groupby == "day" \ + and rec.ks_chart_date_sub_groupby in ["quarter", "year"]: + label = " ".join(res[ks_chart_groupby_relation_fields[0]].split(" ")[0:2]) + elif rec.ks_chart_date_groupby in ["minute", "hour"] and \ + rec.ks_chart_date_sub_groupby in ["month", "week", "quarter", "year"]: + label = " ".join(res[ks_chart_groupby_relation_fields[0]].split(" ")[0:3]) + elif rec.ks_chart_date_groupby == 'month_year': + label = res[ks_chart_groupby_relation_fields[0]] + else: + label = res[ks_chart_groupby_relation_fields[0]].split(" ")[0] + elif rec.ks_chart_groupby_type == 'selection': + selection = res[ks_chart_groupby_relation_fields[0]] + label = dict(self.env[rec.ks_model_name].fields_get( + allfields=[ks_chart_groupby_relation_fields[0]]) + [ks_chart_groupby_relation_fields[0]]['selection'])[selection] + elif rec.ks_chart_groupby_type == 'relational_type': + label = res[ks_chart_groupby_relation_fields[0]][1] + elif rec.ks_chart_groupby_type == 'other': + label = res[ks_chart_groupby_relation_fields[0]] + + labels = [] + value = [] + value_2 = [] + labels_2 = [] + if rec.ks_chart_data_count_type != 'count': + for ress in rec.ks_chart_measure_field: + if rec.ks_chart_sub_groupby_type == 'date_type': + if res[ks_chart_groupby_relation_fields[1]] is not False: + labels.append(res[ks_chart_groupby_relation_fields[1]].split(" ")[ + 0] + " " + ress.field_description) + else: + labels.append(str(res[ks_chart_groupby_relation_fields[1]]) + " " + + ress.field_description) + elif rec.ks_chart_sub_groupby_type == 'selection': + if res[ks_chart_groupby_relation_fields[1]] is not False: + selection = res[ks_chart_groupby_relation_fields[1]] + labels.append(dict(self.env[rec.ks_model_name].fields_get( + allfields=[ks_chart_groupby_relation_fields[1]]) + [ks_chart_groupby_relation_fields[1]]['selection'])[ + selection] + + " " + ress.field_description) + else: + labels.append(str(res[ks_chart_groupby_relation_fields[1]])) + elif rec.ks_chart_sub_groupby_type == 'relational_type': + if res[ks_chart_groupby_relation_fields[1]] is not False: + labels.append(res[ks_chart_groupby_relation_fields[1]][1] + + " " + ress.field_description) + else: + labels.append(str(res[ks_chart_groupby_relation_fields[1]]) + + " " + ress.field_description) + elif rec.ks_chart_sub_groupby_type == 'other': + if res[ks_chart_groupby_relation_fields[1]] is not False: + labels.append(str(res[ks_chart_groupby_relation_fields[1]]) + + "\'s " + ress.field_description) + else: + labels.append(str(res[ks_chart_groupby_relation_fields[1]]) + + " " + ress.field_description) + + value.append(res.get( + ress.name, 0)) + + if rec.ks_chart_measure_field_2 and rec.ks_dashboard_item_type == 'ks_bar_chart': + for ress in rec.ks_chart_measure_field_2: + if rec.ks_chart_sub_groupby_type == 'date_type': + if res[ks_chart_groupby_relation_fields[1]] is not False: + labels_2.append( + res[ks_chart_groupby_relation_fields[1]].split(" ")[0] + " " + + ress.field_description) + else: + labels_2.append(str(res[ks_chart_groupby_relation_fields[1]]) + + " " + ress.field_description) + elif rec.ks_chart_sub_groupby_type == 'selection': + selection = res[ks_chart_groupby_relation_fields[1]] + labels_2.append(dict(self.env[rec.ks_model_name].fields_get( + allfields=[ks_chart_groupby_relation_fields[1]]) + [ks_chart_groupby_relation_fields[1]][ + 'selection'])[ + selection] + " " + ress.field_description) + elif rec.ks_chart_sub_groupby_type == 'relational_type': + if res[ks_chart_groupby_relation_fields[1]] is not False: + labels_2.append( + res[ks_chart_groupby_relation_fields[1]][1] + " " + + ress.field_description) + else: + labels_2.append(str(res[ks_chart_groupby_relation_fields[1]]) + + " " + ress.field_description) + elif rec.ks_chart_sub_groupby_type == 'other': + labels_2.append(str( + res[ks_chart_groupby_relation_fields[1]]) + " " + + ress.field_description) + + value_2.append(res.get( + ress.name, 0)) + + chart_sub_data.append({ + 'value': value_2, + 'labels': label, + 'series': labels_2, + 'domain': domain, + }) + else: + if rec.ks_chart_sub_groupby_type == 'date_type': + if res[ks_chart_groupby_relation_fields[1]] is not False: + labels.append(res[ks_chart_groupby_relation_fields[1]].split(" ")[0]) + else: + labels.append(str(res[ks_chart_groupby_relation_fields[1]])) + elif rec.ks_chart_sub_groupby_type == 'selection': + selection = res[ks_chart_groupby_relation_fields[1]] + if selection: + labels.append(dict(self.env[rec.ks_model_name].fields_get( + allfields=[ks_chart_groupby_relation_fields[1]]) + [ks_chart_groupby_relation_fields[1]]['selection'])[ + selection]) + elif rec.ks_chart_sub_groupby_type == 'relational_type': + if res[ks_chart_groupby_relation_fields[1]] is not False: + labels.append(res[ks_chart_groupby_relation_fields[1]][1]) + else: + labels.append(str(res[ks_chart_groupby_relation_fields[1]])) + elif rec.ks_chart_sub_groupby_type == 'other': + labels.append(res[ks_chart_groupby_relation_fields[1]]) + value.append(res['__count']) + + chart_data.append({ + 'value': value, + 'labels': label, + 'series': labels, + 'domain': domain, + }) + + xlabels = [] + series = [] + values = {} + domains = {} + for data in chart_data: + label = data['labels'] + serie = data['series'] + domain = data['domain'] + + if (len(xlabels) == 0) or (label not in xlabels): + xlabels.append(label) + + if (label not in domains): + domains[label] = domain + else: + domains[label].insert(0, '|') + domains[label] = domains[label] + domain + + series = series + serie + value = data['value'] + counter = 0 + for seri in serie: + if seri not in values: + values[seri] = {} + if label in values[seri]: + values[seri][label] = values[seri][label] + value[counter] + else: + values[seri][label] = value[counter] + counter += 1 + + final_datasets = [] + for serie in series: + if serie not in final_datasets: + final_datasets.append(serie) + + ks_data = [] + for dataset in final_datasets: + ks_dataset = { + 'value': [], + 'key': dataset + } + for label in xlabels: + ks_dataset['value'].append({ + 'domain': domains[label], + 'x': label, + 'y': values[dataset][label] if label in values[dataset] else 0 + }) + ks_data.append(ks_dataset) + + if rec.ks_chart_relation_sub_groupby.name == rec.ks_chart_relation_groupby.name == rec.ks_sort_by_field.name: + ks_data = rec.ks_sort_sub_group_by_records(ks_data, rec.ks_chart_groupby_type, + rec.ks_chart_date_groupby, rec.ks_sort_by_order, + rec.ks_chart_date_sub_groupby) + + ks_chart_data = { + 'labels': [], + 'datasets': [], + 'domains': [], + 'ks_selection': "", + 'ks_currency': 0, + 'ks_field': "", + 'previous_domain': ks_chart_domain + } + + if rec.ks_unit and rec.ks_unit_selection == 'monetary': + ks_chart_data['ks_selection'] += rec.ks_unit_selection + ks_chart_data['ks_currency'] += rec.env.user.company_id.currency_id.id + elif rec.ks_unit and rec.ks_unit_selection == 'custom': + ks_chart_data['ks_selection'] += rec.ks_unit_selection + if rec.ks_chart_unit: + ks_chart_data['ks_field'] += rec.ks_chart_unit + + if len(ks_data) != 0: + for res in ks_data[0]['value']: + ks_chart_data['labels'].append(res['x']) + ks_chart_data['domains'].append(res['domain']) + if rec.ks_chart_measure_field_2 and rec.ks_dashboard_item_type == 'ks_bar_chart': + ks_chart_data['ks_show_second_y_scale'] = True + values_2 = {} + series_2 = [] + for data in chart_sub_data: + label = data['labels'] + serie = data['series'] + series_2 = series_2 + serie + value = data['value'] + + counter = 0 + for seri in serie: + if seri not in values_2: + values_2[seri] = {} + if label in values_2[seri]: + values_2[seri][label] = values_2[seri][label] + value[counter] + else: + values_2[seri][label] = value[counter] + counter += 1 + final_datasets_2 = [] + for serie in series_2: + if serie not in final_datasets_2: + final_datasets_2.append(serie) + ks_data_2 = [] + for dataset in final_datasets_2: + ks_dataset = { + 'value': [], + 'key': dataset + } + for label in xlabels: + ks_dataset['value'].append({ + 'x': label, + 'y': values_2[dataset][label] if label in values_2[dataset] else 0 + }) + ks_data_2.append(ks_dataset) + + for ks_dat in ks_data_2: + dataset = { + 'label': ks_dat['key'], + 'data': [], + 'type': 'line', + 'yAxisID': 'y-axis-1' + + } + for res in ks_dat['value']: + dataset['data'].append(res['y']) + + ks_chart_data['datasets'].append(dataset) + for ks_dat in ks_data: + dataset = { + 'label': ks_dat['key'], + 'data': [] + } + for res in ks_dat['value']: + dataset['data'].append(res['y']) + + ks_chart_data['datasets'].append(dataset) + + if rec.ks_goal_enable and rec.ks_standard_goal_value and rec.ks_dashboard_item_type in [ + 'ks_bar_chart', 'ks_line_chart', 'ks_area_chart', 'ks_horizontalBar_chart']: + goal_dataset = [] + length = len(ks_chart_data['datasets'][0]['data']) + for i in range(length): + goal_dataset.append(rec.ks_standard_goal_value) + ks_goal_datasets = { + 'label': 'Target', + 'data': goal_dataset, + 'ks_as_of_now': False + } + if rec.ks_goal_bar_line and rec.ks_dashboard_item_type != 'ks_horizontalBar_chart': + ks_goal_datasets['type'] = 'line' + ks_chart_data['datasets'].insert(0, ks_goal_datasets) + else: + ks_chart_data['datasets'].append(ks_goal_datasets) + else: + ks_chart_data = False + if self.ks_multiplier_active: + for ks_multiplier in self.ks_multiplier_lines: + for i in range(0, len(ks_chart_data['datasets'])): + try: + if ks_multiplier.ks_multiplier_fields.field_description in ks_chart_data['datasets'][i][ + 'label']: + data_values = ks_chart_data['datasets'][i]['data'] + data_values = list(map(lambda x: ks_multiplier.ks_multiplier_value * x, data_values)) + ks_chart_data['datasets'][i]['data'] = data_values + except Exception as e: + raise ValidationError('JSON file not supported.') + if rec.ks_dashboard_item_type == 'ks_map_view' and ks_chart_data and ks_chart_data.get('groupByIds',False): + map_fields = ["partner_latitude", "partner_longitude", "name"] + map_domain = [['id', 'in',ks_chart_data['groupByIds']]] + ks_chart_data['partner'] = self.env['res.partner'].search_read(map_domain,map_fields) + if (rec.ks_partners_map): + ks_map_domain = [['id','in',json.loads(rec.ks_partners_map)]] + ks_chart_data['ks_partners_map'] = self.env['res.partner'].search_read(ks_map_domain,map_fields) + + return json.dumps(ks_chart_data) + else: + return False + + + @api.depends('ks_domain', 'ks_dashboard_item_type', 'ks_pagination_limit', 'ks_model_id', 'ks_sort_by_field', + 'ks_sort_by_order', 'ks_multiplier_active', 'ks_multiplier_lines', + 'ks_record_data_limit', 'ks_list_view_fields', 'ks_list_view_type', 'ks_list_view_group_fields', + 'ks_chart_groupby_type', 'ks_chart_date_groupby', 'ks_date_filter_field', 'ks_item_end_date', + 'ks_item_start_date', 'ks_compare_period', 'ks_year_period', 'ks_list_target_deviation_field', + 'ks_goal_enable', 'ks_standard_goal_value', 'ks_goal_lines', 'ks_domain_extension') + def ks_get_list_view_data(self): + for rec in self: + rec.ks_list_view_data = rec._ksGetListViewData(domain=[]) + + def _ksGetListViewData(self, domain=[]): + rec = self + if rec.ks_list_view_type and rec.ks_dashboard_item_type and rec.ks_dashboard_item_type == 'ks_list_view' \ + and rec.ks_model_id: + orderby = rec.ks_sort_by_field.id + sort_order = rec.ks_sort_by_order + ks_chart_domain = self.ks_convert_into_proper_domain(rec.ks_domain, rec, domain) + ks_list_view_data = rec.get_list_view_record(orderby, sort_order, ks_chart_domain) + if ks_list_view_data and len(ks_list_view_data) > 0: + ks_list_view_data = json.dumps(ks_list_view_data) + else: + ks_list_view_data = False + else: + ks_list_view_data = False + return ks_list_view_data + + def get_list_view_record(self, orderid, sort_order, ks_chart_domain, ksoffset=0, + initial_count=0, ks_export_all=False): + ks_list_view_data = {'label': [], 'fields': [], 'fields_type': [], + 'store': [], 'type': self.ks_list_view_type, + 'data_rows': [], 'model': self.ks_model_name} + ks_limit = self.ks_record_data_limit if self.ks_record_data_limit and self.ks_record_data_limit > 0 else False + limit = self.ks_pagination_limit + + if ks_limit: + ks_limit = ks_limit - ksoffset + if ks_limit and ks_limit < self.ks_pagination_limit: + limit = ks_limit + else: + limit = self.ks_pagination_limit + if ks_export_all: + limit = ks_limit + offset = 0 + self.ks_sort_by_field = orderid + self.ks_sort_by_order = sort_order + orderby = self.ks_sort_by_field.name if self.ks_sort_by_field else False + if orderby and self.ks_sort_by_order: + orderby = orderby + " " + self.ks_sort_by_order + if self.ks_list_view_type == "ungrouped": + if self.ks_list_view_fields: + ks_list_view_data = self.ks_fetch_list_view_data(self, ks_chart_domain, offset=ksoffset, + initial_count=initial_count) + elif self.ks_list_view_type == "grouped" and self.ks_list_view_group_fields \ + and self.ks_chart_relation_groupby: + ks_list_fields = [] + + if self.ks_chart_groupby_type == 'relational_type': + ks_list_view_data['list_view_type'] = 'relational_type' + ks_list_view_data['groupby'] = self.ks_chart_relation_groupby.name + ks_list_fields.append(self.ks_chart_relation_groupby.name) + ks_list_view_data['fields'].append(self.ks_chart_relation_groupby.ids[0]) + ks_list_view_data['fields_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['store'].append(self.ks_chart_relation_groupby.store) + ks_list_view_data['label'].append(self.ks_chart_relation_groupby.field_description) + for res in self.ks_list_view_group_fields: + ks_list_fields.append(res.name) + ks_list_view_data['label'].append(res.field_description) + ks_list_view_data['fields'].append(res.ids[0]) + ks_list_view_data['fields_type'].append(res.ttype) + ks_list_view_data['store'].append(res.store) + + try: + ks_list_view_records = self.env[self.ks_model_name]. \ + read_group(ks_chart_domain, ks_list_fields, [self.ks_chart_relation_groupby.name], + orderby=orderby, limit=limit, offset=ksoffset, lazy=False) + except Exception as e: + ks_list_view_records = [] + for res in ks_list_view_records: + if all(list_fields in res for list_fields in ks_list_fields) \ + and res[self.ks_chart_relation_groupby.name]: + counter = 0 + data_row = {'id': res[self.ks_chart_relation_groupby.name][0], 'data': [], + 'domain': json.dumps(res['__domain']), 'ks_column_type': []} + for field_rec in ks_list_fields: + if counter == 0: + data_row['data'].append(res[field_rec][1]) + else: + data_row['data'].append(res[field_rec]) + counter += 1 + data_row['ks_column_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['data_rows'].append(data_row) + + elif self.ks_chart_groupby_type == 'date_type' and self.ks_chart_date_groupby: + ks_list_view_data['list_view_type'] = 'date_type' + ks_list_field = [] + ks_chart_date_groupby = self.ks_chart_date_groupby + name = '' + if self.ks_chart_date_groupby == 'month_year': + ks_chart_date_groupby = 'month' + name = 'month_year' + ks_list_view_data[ + 'groupby'] = self.ks_chart_relation_groupby.name + ':' + ks_chart_date_groupby + ks_list_field.append(self.ks_chart_relation_groupby.name) + ks_list_fields.append(self.ks_chart_relation_groupby.name + ':' + ks_chart_date_groupby) + ks_list_view_data['label'].append( + self.ks_chart_relation_groupby.field_description + ' : ' + ( + 'Month-Year' if name == 'month_year' else ks_chart_date_groupby.capitalize()) + ) + ks_list_view_data['fields'].append(self.ks_chart_relation_groupby.ids[0]) + ks_list_view_data['fields_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['store'].append(self.ks_chart_relation_groupby.store) + for res in self.ks_list_view_group_fields: + ks_list_fields.append(res.name) + ks_list_field.append(res.name) + ks_list_view_data['label'].append(res.field_description) + ks_list_view_data['fields'].append(res.ids[0]) + ks_list_view_data['fields_type'].append(res.ttype) + ks_list_view_data['store'].append(res.store) + ks_label = ks_list_view_data['label'].copy() + ks_fields = ks_list_view_data['fields'].copy() + ks_fields_type = ks_list_view_data['fields_type'].copy() + + list_target_deviation_field = [] + if self.ks_goal_enable and self.ks_list_target_deviation_field: + list_target_deviation_field.append(self.ks_list_target_deviation_field.name) + if self.ks_list_target_deviation_field.name in ks_list_field: + ks_list_field.remove(self.ks_list_target_deviation_field.name) + ks_list_fields.remove(self.ks_list_target_deviation_field.name) + ks_list_view_data['label'].remove(self.ks_list_target_deviation_field.field_description) + try: + ks_list_view_records = self.env[self.ks_model_name]. \ + read_group(ks_chart_domain, ks_list_field + list_target_deviation_field, + [self.ks_chart_relation_groupby.name + ':' + ks_chart_date_groupby], + orderby=orderby, limit=limit, offset=ksoffset, lazy=False) + except Exception as E: + ks_list_view_records = [] + if all(list_fields in res for res in ks_list_view_records for list_fields in + ks_list_fields + list_target_deviation_field): + for res in ks_list_view_records: + counter = 0 + data_row = {'id': 0, 'data': [], 'domain': json.dumps(res['__domain']), 'ks_column_type': []} + for field_rec in ks_list_fields: + data_row['data'].append(res[field_rec]) + data_row['ks_column_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['data_rows'].append(data_row) + + if self.ks_goal_enable: + ks_list_labels = [] + ks_list_view_data['label'].append("Target") + + if self.ks_list_target_deviation_field: + ks_list_view_data['label'].append( + self.ks_list_target_deviation_field.field_description) + ks_list_view_data['label'].append("Achievement") + ks_list_view_data['label'].append("Deviation") + + for res in ks_list_view_records: + ks_list_labels.append(res[ks_list_view_data['groupby']]) + ks_list_view_data2 = self.get_target_list_view_data(ks_list_view_records, self, + ks_list_fields, + ks_list_view_data['groupby'], + list_target_deviation_field, + ks_chart_domain) + ks_list_view_data['data_rows'] = ks_list_view_data2['data_rows'] + ks_list_view_data['store'].clear() + ks_list_view_data['fields_type'].clear() + ks_list_view_data['fields'].clear() + for label in ks_list_view_data['label']: + if label == 'Achievement': + ks_list_view_data['store'].append(False) + ks_list_view_data['fields_type'].append(False) + ks_list_view_data['fields'].append(False) + elif label == 'Target': + ks_list_view_data['store'].append(False) + ks_list_view_data['fields_type'].append(False) + ks_list_view_data['fields'].append(False) + elif label == 'Deviation': + ks_list_view_data['store'].append(False) + ks_list_view_data['fields_type'].append(False) + ks_list_view_data['fields'].append(False) + else: + ks_list_view_data['store'].append(True) + if label in ks_label: + index = ks_label.index(label) + ks_fields_value = ks_fields[index] + ks_fields_type_value = ks_fields_type[index] + ks_list_view_data['fields_type'].append(ks_fields_type_value) + ks_list_view_data['fields'].append(ks_fields_value) + + + + elif self.ks_chart_groupby_type == 'selection': + ks_list_view_data['list_view_type'] = 'selection' + ks_list_view_data['groupby'] = self.ks_chart_relation_groupby.name + ks_list_view_data['fields'].append(self.ks_chart_relation_groupby.ids[0]) + ks_list_view_data['fields_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['store'].append(self.ks_chart_relation_groupby.store) + ks_selection_field = self.ks_chart_relation_groupby.name + ks_list_view_data['label'].append(self.ks_chart_relation_groupby.field_description) + for res in self.ks_list_view_group_fields: + ks_list_fields.append(res.name) + ks_list_view_data['label'].append(res.field_description) + ks_list_view_data['fields'].append(res.ids[0]) + ks_list_view_data['fields_type'].append(res.ttype) + ks_list_view_data['store'].append(res.store) + + try: + ks_list_view_records = self.env[self.ks_model_name] \ + .read_group(ks_chart_domain, ks_list_fields, [self.ks_chart_relation_groupby.name], + orderby=orderby, limit=limit, offset=ksoffset, lazy=False) + except Exception as e: + ks_list_view_records = [] + for res in ks_list_view_records: + if all(list_fields in res for list_fields in ks_list_fields): + counter = 0 + data_row = {'id': 0, 'data': [], 'domain': json.dumps(res['__domain']), 'ks_column_type': []} + if res[ks_selection_field]: + data_row['data'].append(dict( + self.env[self.ks_model_name].fields_get(allfields=ks_selection_field) + [ks_selection_field]['selection'])[res[ks_selection_field]]) + else: + data_row['data'].append(" ") + data_row['ks_column_type'].append(self.ks_chart_relation_groupby.ttype) + for field_rec in ks_list_fields: + data_row['data'].append(res[field_rec]) + data_row['ks_column_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['data_rows'].append(data_row) + + elif self.ks_chart_groupby_type == 'other': + ks_list_view_data['list_view_type'] = 'other' + ks_list_view_data['groupby'] = self.ks_chart_relation_groupby.name + ks_list_fields.append(self.ks_chart_relation_groupby.name) + ks_list_view_data['fields'].append(self.ks_chart_relation_groupby.ids[0]) + ks_list_view_data['fields_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['store'].append(self.ks_chart_relation_groupby.store) + ks_list_view_data['label'].append(self.ks_chart_relation_groupby.field_description) + for res in self.ks_list_view_group_fields: + if res.name != self.ks_chart_relation_groupby.name: + ks_list_fields.append(res.name) + ks_list_view_data['label'].append(res.field_description) + ks_list_view_data['fields'].append(res.ids[0]) + ks_list_view_data['fields_type'].append(res.ttype) + ks_list_view_data['store'].append(res.store) + + try: + ks_list_view_records = self.env[self.ks_model_name] \ + .read_group(ks_chart_domain, ks_list_fields, [self.ks_chart_relation_groupby.name], + orderby=orderby, limit=limit, offset=ksoffset, lazy=False) + except Exception as E: + ks_list_view_records = [] + for res in ks_list_view_records: + if all(list_fields in res for list_fields in ks_list_fields): + counter = 0 + data_row = {'id': 0, 'data': [], 'domain': json.dumps(res['__domain']), 'ks_column_type': []} + + for field_rec in ks_list_fields: + if counter == 0: + data_row['data'].append(res[field_rec]) + else: + if self.ks_chart_relation_groupby.name == field_rec: + data_row['data'].append(res[field_rec] * res[field_rec + '_count']) + else: + data_row['data'].append(res[field_rec]) + counter += 1 + data_row['ks_column_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['data_rows'].append(data_row) + + # ks_list_view_data = json.dumps(ks_list_view_data) + if self.ks_multiplier_active and self.ks_list_view_type == 'grouped': + for ks_multiplier in self.ks_multiplier_lines: + label = ks_multiplier.ks_multiplier_fields.field_description + if label in ks_list_view_data['label']: + index = ks_list_view_data['label'].index(label) + for i in range(0, len(ks_list_view_data['data_rows'])): + data_values = ks_list_view_data['data_rows'][i]['data'][index] * ks_multiplier.ks_multiplier_value + ks_list_view_data['data_rows'][i]['data'][index] = data_values + return ks_list_view_data + + def get_target_list_view_data(self, ks_list_view_records, rec, ks_list_fields, ks_group_by, + target_deviation_field, ks_chart_domain): + ks_list_view_data = {} + ks_list_labels = [] + ks_list_records = {} + ks_domains = {} + for res in ks_list_view_records: + ks_list_labels.append(res[ks_group_by]) + ks_domains[res[ks_group_by]] = res['__domain'] + ks_list_records[res[ks_group_by]] = {'measure_field': [], 'deviation_value': 0.0} + ks_list_records[res[ks_group_by]]['measure_field'] = [] + for fields in ks_list_fields[1:]: + ks_list_records[res[ks_group_by]]['measure_field'].append(res[fields]) + for field in target_deviation_field: + ks_list_records[res[ks_group_by]]['deviation'] = res[field] + + if rec._context.get('current_id', False): + ks_item_id = rec._context['current_id'] + else: + ks_item_id = rec.id + + if rec.ks_date_filter_selection_2 == "l_none": + selected_start_date = rec._context.get('ksDateFilterStartDate', False) + selected_end_date = rec._context.get('ksDateFilterEndDate', False) + else: + selected_start_date = rec.ks_item_start_date + selected_end_date = rec.ks_item_end_date + + ks_goal_domain = [('ks_dashboard_item', '=', ks_item_id)] + + if selected_start_date and selected_end_date: + ks_goal_domain.extend([('ks_goal_date', '>=', selected_start_date.strftime("%Y-%m-%d")), + ('ks_goal_date', '<=', selected_end_date.strftime("%Y-%m-%d"))]) + + ks_date_data = rec.ks_get_start_end_date(rec.ks_model_name, rec.ks_chart_relation_groupby.name, + rec.ks_chart_relation_groupby.ttype, + ks_chart_domain, + ks_goal_domain) + + labels = [] + ks_chart_date_groupby = rec.ks_chart_date_groupby + if rec.ks_chart_date_groupby == 'month_year': + ks_chart_date_groupby = 'month' + if ks_date_data['start_date'] and ks_date_data['end_date'] and rec.ks_goal_lines: + labels = self.generate_timeserise(ks_date_data['start_date'], ks_date_data['end_date'], + ks_chart_date_groupby) + try: + ks_goal_records = self.env['ks_dashboard_ninja.item_goal'].read_group( + ks_goal_domain, ['ks_goal_value'], + ['ks_goal_date' + ":" + ks_chart_date_groupby], lazy=False) + except: + ks_goal_records = [] + + ks_goal_labels = [] + ks_goal_dataset = {} + ks_list_view_data['data_rows'] = [] + if rec.ks_goal_lines and len(rec.ks_goal_lines) != 0: + ks_goal_domains = {} + for res in ks_goal_records: + if res['ks_goal_date' + ":" + ks_chart_date_groupby]: + ks_goal_labels.append(res['ks_goal_date' + ":" + ks_chart_date_groupby]) + ks_goal_dataset[res['ks_goal_date' + ":" + ks_chart_date_groupby]] = res['ks_goal_value'] + ks_goal_domains[res['ks_goal_date' + ":" + ks_chart_date_groupby]] = res.get('__domain') + + for goal_domain in ks_goal_domains.keys(): + ks_goal_doamins = [] + for item in ks_goal_domains[goal_domain]: + + if 'ks_goal_date' in item: + domain = list(item) + domain[0] = ks_group_by.split(":")[0] + domain = tuple(domain) + ks_goal_doamins.append(domain) + ks_goal_doamins.insert(0, '&') + ks_goal_domains[goal_domain] = ks_goal_doamins + + ks_chart_records_dates = ks_list_labels + list( + set(ks_goal_labels) - set(ks_list_labels)) + + ks_list_labels_dates = [] + for label in labels: + if label in ks_chart_records_dates: + ks_list_labels_dates.append(label) + + for label in ks_list_labels_dates: + data_rows = {'data': [label], 'ks_column_type': [],'store':True} + data = ks_list_records.get(label, False) + if data: + data_rows['data'] = data_rows['data'] + data['measure_field'] + data_rows['domain'] = json.dumps(ks_domains[label]) + else: + for fields in ks_list_fields[1:]: + data_rows['data'].append(0.0) + data_rows['domain'] = json.dumps(ks_goal_domains[label]) + + target_value = (ks_goal_dataset.get(label, 0.0)) + data_rows['data'].append(target_value) + + for field in target_deviation_field: + ks_multiplier = 1 + if self.ks_multiplier_active: + for line in self.ks_multiplier_lines: + if line.ks_multiplier_fields.name == field: + ks_multiplier = line.ks_multiplier_value + if data: + data_rows['data'].append(data['deviation']) + value = data['deviation'] * ks_multiplier + else: + data_rows['data'].append(0.0) + value = 0 + if target_value: + acheivement = round(((value) / target_value) * 100) + acheivement = str(acheivement) + "%" + else: + acheivement = "" + deviation = (value - target_value) + + data_rows['data'].append(acheivement) + data_rows['data'].append(deviation) + data_rows['ks_column_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['data_rows'].append(data_rows) + + else: + for res in ks_list_view_records: + if all(list_fields in res for list_fields in ks_list_fields): + counter = 0 + data_row = {'id': 0, 'data': [], 'domain': json.dumps(res['__domain']), 'ks_column_type': [],'store':True} + for field_rec in ks_list_fields: + data_row['data'].append(res[field_rec]) + data_row['data'].append(rec.ks_standard_goal_value) + data_row['domain'] = json.dumps(res['__domain']) + for field in target_deviation_field: + ks_multiplier = 1 + if self.ks_multiplier_active: + for line in self.ks_multiplier_lines: + if line.ks_multiplier_fields.name == field: + ks_multiplier = line.ks_multiplier_value + + value = res[field] * ks_multiplier + data_row['data'].append(res[field]) + target_value = rec.ks_standard_goal_value + + if target_value: + acheivement = round(((value) / target_value) * 100) + acheivement = str(acheivement) + "%" + else: + acheivement = "" + + deviation = (value - target_value) + data_row['data'].append(acheivement) + data_row['data'].append(deviation) + ks_list_view_data['data_rows'].append(data_row) + + return ks_list_view_data + + @api.model + def ks_fetch_list_view_data(self, rec, ks_chart_domain, limit=15, offset=0, ks_export_all=False, initial_count=0): + ks_list_view_data = {'label': [], 'fields': [], 'fields_type': [], + 'store': [], 'type': 'ungrouped', + 'data_rows': [], 'model': self.ks_model_name} + + # ks_chart_domain = self.ks_convert_into_proper_domain(self.ks_domain, self) + orderby = self.ks_sort_by_field.name if self.ks_sort_by_field else False + if orderby and self.ks_sort_by_order: + orderby = orderby + " " + self.ks_sort_by_order + + ks_limit = self.ks_record_data_limit if self.ks_record_data_limit and self.ks_record_data_limit > 0 else False + limit = self.ks_pagination_limit + if ks_limit: + ks_limit = ks_limit - offset + if ks_limit and ks_limit < self.ks_pagination_limit: + limit = ks_limit + else: + limit = self.ks_pagination_limit + if ks_export_all: + limit = ks_limit + offset = 0 + if self.ks_list_view_fields: + ks_list_view_data['list_view_type'] = 'other' + ks_list_view_data['groupby'] = False + ks_list_view_data['label'] = [] + ks_list_view_data['date_index'] = [] + for res in self.ks_list_view_fields: + if (res.ttype == "datetime" or res.ttype == "date"): + index = len(ks_list_view_data['label']) + ks_list_view_data['label'].append(res.field_description) + ks_list_view_data['fields'].append(res.ids[0]) + ks_list_view_data['date_index'].append(index) + ks_list_view_data['fields_type'].append(res.ttype) + ks_list_view_data['store'].append(res.store) + else: + ks_list_view_data['label'].append(res.field_description) + ks_list_view_data['fields'].append(res.ids[0]) + ks_list_view_data['fields_type'].append(res.ttype) + ks_list_view_data['store'].append(res.store) + + ks_list_view_fields = [res.name for res in self.ks_list_view_fields] + ks_list_view_field_type = [res.ttype for res in self.ks_list_view_fields] + try: + ks_list_view_records = self.env[self.ks_model_name].search_read(ks_chart_domain, + ks_list_view_fields, + order=orderby, limit=limit, offset=offset) + except Exception as e: + ks_list_view_data = False + return ks_list_view_data + for res in ks_list_view_records: + counter = 0 + data_row = {'id': res['id'], 'data': [], 'ks_column_type': []} + for field_rec in ks_list_view_fields: + if type(res[field_rec]) == fields.datetime or type(res[field_rec]) == fields.date: + res[field_rec] = res[field_rec].strftime("%D %T") + elif ks_list_view_field_type[counter] == "many2one": + if res[field_rec]: + res[field_rec] = res[field_rec][1] + elif ks_list_view_field_type[counter] == "selection" and res.get(field_rec, False): + res[field_rec] = dict(self.env[rec.ks_model_name].fields_get(allfields=[field_rec]) + [field_rec]['selection'])[res[field_rec]] + data_row['data'].append(res[field_rec]) + data_row['ks_column_type'].append(ks_list_view_field_type[counter]) + counter += 1 + ks_list_view_data['data_rows'].append(data_row) + + return ks_list_view_data + + @api.onchange('ks_dashboard_item_type') + def set_color_palette(self): + for rec in self: + if rec.ks_dashboard_item_type == "ks_bar_chart" or rec.ks_dashboard_item_type == "ks_horizontalBar_chart" \ + or rec.ks_dashboard_item_type == "ks_line_chart" or rec.ks_dashboard_item_type == "ks_area_chart": + rec.ks_chart_item_color = "dark" + else: + rec.ks_chart_item_color = "moonrise" + if rec.ks_dashboard_item_type == 'ks_kpi' or rec.ks_dashboard_item_type == 'ks_tile': + rec.ks_data_calculation_type = 'custom' + if rec.ks_dashboard_item_type != "ks_bar_chart": + rec.ks_chart_cumulative_field = False + rec.ks_chart_cumulative = False + rec.ks_multiplier_active = False + rec.ks_model_id_2 = False + rec.ks_chart_measure_field_2 = False + if rec.ks_dashboard_item_type == 'ks_to_do': + rec.ks_model_id_2 = False + rec.ks_model_id = False + + # Time Filter Calculation + + @api.onchange('ks_date_filter_selection') + def ks_set_date_filter(self): + for rec in self: + if (not rec.ks_date_filter_selection) or rec.ks_date_filter_selection == "l_none": + rec.ks_item_start_date = rec.ks_item_end_date = False + elif rec.ks_date_filter_selection != 'l_custom': + ks_date_data = ks_get_date(rec.ks_date_filter_selection, self, rec.ks_date_filter_field.ttype) + rec.ks_item_start_date = ks_date_data["selected_start_date"] + rec.ks_item_end_date = ks_date_data["selected_end_date"] + + @api.depends('ks_dashboard_item_type', 'ks_goal_enable', 'ks_standard_goal_value', 'ks_record_count', + 'ks_record_count_2', 'ks_previous_period', 'ks_compare_period', 'ks_year_period', + 'ks_compare_period_2', 'ks_year_period_2', 'ks_domain_extension_2') + def ks_get_kpi_data(self): + for rec in self: + rec.ks_kpi_data = rec._ksGetKpiData(domain1=[], domain2=[]) + + def _ksGetKpiData(self, domain1=[], domain2=[]): + rec = self + if rec.ks_dashboard_item_type and rec.ks_dashboard_item_type == 'ks_kpi' and rec.ks_model_id: + ks_kpi_data = [] + ks_record_count = 0.0 + ks_kpi_data_model_1 = {} + ks_record_count = rec._ksGetRecordCount(domain1) + ks_kpi_data_model_1['model'] = rec.ks_model_name + ks_kpi_data_model_1['record_field'] = rec.ks_record_field.field_description + ks_kpi_data_model_1['record_data'] = ks_record_count + + if rec.ks_goal_enable: + ks_kpi_data_model_1['target'] = rec.ks_standard_goal_value + ks_kpi_data.append(ks_kpi_data_model_1) + + if rec.ks_previous_period: + ks_previous_period_data = rec.ks_get_previous_period_data(rec) + ks_kpi_data_model_1['previous_period'] = ks_previous_period_data + + if rec.ks_model_id_2 and rec.ks_record_count_type_2: + ks_kpi_data_model_2 = {} + ks_kpi_data_model_2['model'] = rec.ks_model_name_2 + ks_kpi_data_model_2[ + 'record_field'] = 'count' if rec.ks_record_count_type_2 == 'count' else \ + rec.ks_record_field_2.field_description + ks_kpi_data_model_2['record_data'] = rec._ksGetRecordCount_2(domain2) + ks_kpi_data.append(ks_kpi_data_model_2) + + return json.dumps(ks_kpi_data) + else: + return False + + # writing separate function for fetching previous period data + def ks_get_previous_period_data(self, rec): + switcher = { + 'l_day': 'ls_day', + 't_week': 'ls_week', + 't_month': 'ls_month', + 't_quarter': 'ls_quarter', + 't_year': 'ls_year', + } + ks_previous_period = False + ks_date_data = False + if rec.ks_date_filter_selection == "l_none": + date_filter_selection = rec.ks_dashboard_ninja_board_id.ks_date_filter_selection + else: + date_filter_selection = rec.ks_date_filter_selection + ks_previous_period = switcher.get(date_filter_selection, False) + if ks_previous_period: + ks_date_data = ks_get_date(ks_previous_period, self, rec.ks_date_filter_field.ttype) + + if (ks_date_data): + previous_period_start_date = ks_date_data["selected_start_date"] + previous_period_end_date = ks_date_data["selected_end_date"] + proper_domain = rec.ks_get_previous_period_domain(rec.ks_domain, previous_period_start_date, + previous_period_end_date, rec.ks_date_filter_field) + ks_record_count = 0.0 + + if rec.ks_record_count_type == 'count': + ks_record_count = 0 + try: + ks_record_count = self.env[rec.ks_model_name].search_count(proper_domain) + except Exception as E: + ks_record_count = 0 + return ks_record_count + + elif rec.ks_record_field: + try: + data = \ + self.env[rec.ks_model_name].read_group(proper_domain, [rec.ks_record_field.name], [], lazy=False)[0] + except Exception as E: + data = {} + if rec.ks_record_count_type == 'sum': + return data.get(rec.ks_record_field.name, 0) if data.get('__count', False) and ( + data.get(rec.ks_record_field.name)) else 0 + else: + return data.get(rec.ks_record_field.name, 0) / data.get('__count', 1) \ + if data.get('__count', False) and (data.get(rec.ks_record_field.name)) else 0 + else: + return False + else: + return False + + def ks_get_previous_period_domain(self, ks_domain, ks_start_date, ks_end_date, date_filter_field): + if ks_domain and "%UID" in ks_domain: + ks_domain = ks_domain.replace('"%UID"', str(self.env.user.id)) + if ks_domain: + # try: + proper_domain = safe_eval(ks_domain) + if ks_start_date and ks_end_date and date_filter_field: + proper_domain.extend([(date_filter_field.name, ">=", ks_start_date), + (date_filter_field.name, "<=", ks_end_date)]) + + else: + if ks_start_date and ks_end_date and date_filter_field: + proper_domain = ([(date_filter_field.name, ">=", ks_start_date), + (date_filter_field.name, "<=", ks_end_date)]) + else: + proper_domain = [] + return proper_domain + + @api.depends('ks_domain_2', 'ks_model_id_2', 'ks_record_field_2', 'ks_record_count_type_2', 'ks_item_start_date_2', + 'ks_date_filter_selection_2', 'ks_record_count_type_2', 'ks_compare_period_2', 'ks_year_period_2') + def ks_get_record_count_2(self): + for rec in self: + rec.ks_record_count_2 = rec._ksGetRecordCount_2(domain=[]) + + def _ksGetRecordCount_2(self, domain=[]): + rec = self + if rec.ks_record_count_type_2 == 'count': + ks_record_count = rec.ks_fetch_model_data_2(rec.ks_model_name_2, rec.ks_domain_2, 'search_count', rec, + domain) + + elif rec.ks_record_count_type_2 in ['sum', 'average'] and rec.ks_record_field_2: + ks_records_grouped_data = rec.ks_fetch_model_data_2(rec.ks_model_name_2, rec.ks_domain_2, 'read_group', + rec, domain) + if ks_records_grouped_data and len(ks_records_grouped_data) > 0: + ks_records_grouped_data = ks_records_grouped_data[0] + if rec.ks_record_count_type_2 == 'sum' and ks_records_grouped_data.get('__count', False) and ( + ks_records_grouped_data.get(rec.ks_record_field_2.name)): + ks_record_count = ks_records_grouped_data.get(rec.ks_record_field_2.name, 0) + elif rec.ks_record_count_type_2 == 'average' and ks_records_grouped_data.get( + '__count', False) and (ks_records_grouped_data.get(rec.ks_record_field_2.name)): + ks_record_count = ks_records_grouped_data.get(rec.ks_record_field_2.name, + 0) / ks_records_grouped_data.get('__count', + 1) + else: + ks_record_count = 0 + else: + ks_record_count = 0 + else: + ks_record_count = False + + return ks_record_count + + @api.onchange('ks_model_id_2') + def make_record_field_empty_2(self): + for rec in self: + rec.ks_record_field_2 = False + rec.ks_domain_2 = False + rec.ks_date_filter_field_2 = False + rec.ks_previous_period = False + # To show "created on" by default on date filter field on model select. + if rec.ks_model_id: + datetime_field_list = rec.ks_date_filter_field_2.search( + [('model_id', '=', rec.ks_model_id_2.id), '|', ('ttype', '=', 'date'), + ('ttype', '=', 'datetime')]).read(['id', 'name']) + for field in datetime_field_list: + if field['name'] == 'create_date': + rec.ks_date_filter_field_2 = field['id'] + else: + rec.ks_date_filter_field_2 = False + rec.ks_domain_extension_2 = False + + # Writing separate function to fetch dashboard item data + def ks_fetch_model_data_2(self, ks_model_name, ks_domain, ks_func, rec, domain=[]): + data = 0 + try: + if ks_domain and ks_domain != '[]' and ks_model_name: + proper_domain = self.ks_convert_into_proper_domain_2(ks_domain, rec, domain) + if ks_func == 'search_count': + data = self.env[ks_model_name].search_count(proper_domain) + elif ks_func == 'read_group': + data = self.env[ks_model_name].read_group(proper_domain, [rec.ks_record_field_2.name], [], + lazy=False) + elif ks_model_name: + # Have to put extra if condition here because on load,model giving False value + proper_domain = self.ks_convert_into_proper_domain_2(False, rec, domain) + if ks_func == 'search_count': + data = self.env[ks_model_name].search_count(proper_domain) + + elif ks_func == 'read_group': + data = self.env[ks_model_name].read_group(proper_domain, [rec.ks_record_field_2.name], [], + lazy=False) + else: + return [] + except Exception as e: + return [] + return data + + @api.onchange('ks_date_filter_selection_2') + def ks_set_date_filter_2(self): + for rec in self: + if (not rec.ks_date_filter_selection_2) or rec.ks_date_filter_selection_2 == "l_none": + rec.ks_item_start_date_2 = rec.ks_item_end_date = False + elif rec.ks_date_filter_selection_2 != 'l_custom': + ks_date_data = ks_get_date(rec.ks_date_filter_selection_2, self, rec.ks_date_filter_field_2.ttype) + rec.ks_item_start_date_2 = ks_date_data["selected_start_date"] + rec.ks_item_end_date_2 = ks_date_data["selected_end_date"] + + def ks_convert_into_proper_domain_2(self, ks_domain_2, rec, domain=[]): + if ks_domain_2 and "%UID" in ks_domain_2: + ks_domain_2 = ks_domain_2.replace('"%UID"', str(self.env.user.id)) + if ks_domain_2 and "%MYCOMPANY" in ks_domain_2: + ks_domain_2 = ks_domain_2.replace('"%MYCOMPANY"', str(self.env.company.id)) + + ks_date_domain = False + + if rec.ks_date_filter_field_2: + if not rec.ks_date_filter_selection_2 or rec.ks_date_filter_selection_2 == "l_none": + selected_start_date = self._context.get('ksDateFilterStartDate', False) + selected_end_date = self._context.get('ksDateFilterEndDate', False) + ks_is_def_custom_filter = self._context.get('ksIsDefultCustomDateFilter', False) + ks_timezone = self._context.get('tz') or self.env.user.tz + if selected_start_date and selected_end_date and rec.ks_date_filter_field_2.ttype == 'datetime' and not ks_is_def_custom_filter: + selected_start_date = ks_convert_into_utc(selected_start_date, ks_timezone) + selected_end_date = ks_convert_into_utc(selected_end_date, ks_timezone) + if selected_start_date and selected_end_date and rec.ks_date_filter_field_2.ttype == 'date' and ks_is_def_custom_filter: + selected_start_date = ks_convert_into_local(selected_start_date, ks_timezone) + selected_end_date = ks_convert_into_local(selected_end_date, ks_timezone) + if self._context.get('ksDateFilterSelection', False) and self._context['ksDateFilterSelection'] not in [ + 'l_none', 'l_custom']: + ks_date_data = ks_get_date(self._context.get('ksDateFilterSelection'), self, + rec.ks_date_filter_field_2.ttype) + selected_start_date = ks_date_data["selected_start_date"] + selected_end_date = ks_date_data["selected_end_date"] + + if selected_end_date and not selected_start_date: + ks_date_domain = [ + (rec.ks_date_filter_field_2.name, "<=", + selected_end_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT))] + elif selected_start_date and not selected_end_date: + ks_date_domain = [ + (rec.ks_date_filter_field_2.name, ">=", + selected_start_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT))] + else: + if selected_end_date and selected_start_date: + ks_date_domain = [ + (rec.ks_date_filter_field_2.name, ">=", + selected_start_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT)), + (rec.ks_date_filter_field_2.name, "<=", + selected_end_date.strftime(DEFAULT_SERVER_DATETIME_FORMAT))] + else: + if rec.ks_date_filter_selection_2 and rec.ks_date_filter_selection_2 != 'l_custom': + ks_date_data = ks_get_date(rec.ks_date_filter_selection_2, self, rec.ks_date_filter_field_2.ttype) + selected_start_date = ks_date_data["selected_start_date"] + selected_end_date = ks_date_data["selected_end_date"] + else: + selected_start_date = False + selected_end_date = False + if rec.ks_item_start_date_2 or rec.ks_item_end_date_2: + selected_start_date = rec.ks_item_start_date_2 + selected_end_date = rec.ks_item_end_date_2 + if rec.ks_date_filter_field_2.ttype == 'date' and rec.ks_item_start_date_2 and rec.ks_item_end_date_2: + ks_timezone = self._context.get('tz') or self.env.user.tz + selected_start_date = ks_convert_into_local(rec.ks_item_start_date_2, ks_timezone) + selected_end_date = ks_convert_into_local(rec.ks_item_end_date_2, ks_timezone) + + if selected_start_date and selected_end_date: + if rec.ks_compare_period_2: + ks_compare_period_2 = abs(rec.ks_compare_period_2) + if ks_compare_period_2 > 100: + ks_compare_period_2 = 100 + if rec.ks_compare_period_2 > 0: + selected_end_date = selected_end_date + ( + selected_end_date - selected_start_date) * ks_compare_period_2 + if rec.ks_date_filter_field.ttype == "date" and rec.ks_date_filter_selection == 'l_day': + selected_end_date = selected_end_date + timedelta(days=ks_compare_period_2) + elif rec.ks_compare_period_2 < 0: + selected_start_date = selected_start_date - ( + selected_end_date - selected_start_date) * ks_compare_period_2 + if rec.ks_date_filter_field.ttype == "date" and rec.ks_date_filter_selection == 'l_day': + selected_start_date = selected_end_date - timedelta(days=ks_compare_period_2) + + if rec.ks_year_period_2 and rec.ks_year_period_2 != 0: + abs_year_period_2 = abs(rec.ks_year_period_2) + sign_yp = rec.ks_year_period_2 / abs_year_period_2 + if abs_year_period_2 > 100: + abs_year_period_2 = 100 + date_field_name = rec.ks_date_filter_field_2.name + + ks_date_domain = ['&', (date_field_name, ">=", + fields.datetime.strftime(selected_start_date, + DEFAULT_SERVER_DATETIME_FORMAT)), + (date_field_name, "<=", + fields.datetime.strftime(selected_end_date, DEFAULT_SERVER_DATETIME_FORMAT))] + + for p in range(1, abs_year_period_2 + 1): + ks_date_domain.insert(0, '|') + ks_date_domain.extend(['&', (date_field_name, ">=", fields.datetime.strftime( + selected_start_date - relativedelta.relativedelta(years=p) * sign_yp, + DEFAULT_SERVER_DATETIME_FORMAT)), + (date_field_name, "<=", fields.datetime.strftime( + selected_end_date - relativedelta.relativedelta( + years=p) * sign_yp, + DEFAULT_SERVER_DATETIME_FORMAT))]) + else: + if rec.ks_date_filter_field_2: + selected_start_date = fields.datetime.strftime(selected_start_date, + DEFAULT_SERVER_DATETIME_FORMAT) + selected_end_date = fields.datetime.strftime(selected_end_date, + DEFAULT_SERVER_DATETIME_FORMAT) + ks_date_domain = [(rec.ks_date_filter_field_2.name, ">=", selected_start_date), + (rec.ks_date_filter_field_2.name, "<=", selected_end_date)] + else: + ks_date_domain = [] + elif selected_start_date and rec.ks_date_filter_field_2: + selected_start_date = fields.datetime.strftime(selected_start_date, DEFAULT_SERVER_DATETIME_FORMAT) + ks_date_domain = [(rec.ks_date_filter_field_2.name, ">=", selected_start_date)] + elif selected_end_date and rec.ks_date_filter_field_2: + selected_end_date = fields.datetime.strftime(selected_end_date, DEFAULT_SERVER_DATETIME_FORMAT) + ks_date_domain = [(rec.ks_date_filter_field_2.name, "<=", selected_end_date)] + else: + ks_date_domain = [] + + proper_domain = safe_eval(ks_domain_2) if ks_domain_2 else [] + if ks_date_domain: + proper_domain.extend(ks_date_domain) + if rec.ks_domain_extension_2: + ks_domain_extension = rec.ks_convert_domain_extension(rec.ks_domain_extension_2, rec) + proper_domain.extend(ks_domain_extension) + if domain: + proper_domain.extend(domain) + + return proper_domain + + def ks_fetch_chart_data(self, ks_model_name, ks_chart_domain, ks_chart_measure_field_with_type, + ks_chart_measure_field_with_type_2, + ks_chart_measure_field, ks_chart_measure_field_2, + ks_chart_groupby_relation_field, ks_chart_date_groupby, ks_chart_groupby_type, orderby, + limit, chart_count, ks_chart_measure_field_ids, ks_chart_measure_field_2_ids, + ks_chart_groupby_relation_field_id, ks_chart_data): + + if ks_chart_groupby_type == "date_type": + ks_chart_groupby_field = ks_chart_groupby_relation_field + ":" + ks_chart_date_groupby + else: + ks_chart_groupby_field = ks_chart_groupby_relation_field + + try: + if self.ks_fill_temporal and ks_chart_date_groupby not in ['minute', 'hour']: + ks_chart_records = self.env[ks_model_name].with_context(fill_temporal=True) \ + .read_group(ks_chart_domain, + list(set(ks_chart_measure_field_with_type + ks_chart_measure_field_with_type_2 + + [ks_chart_groupby_relation_field])), [ks_chart_groupby_field], + orderby=orderby, limit=limit, lazy=False) + else: + ks_chart_records = self.env[ks_model_name] \ + .read_group(ks_chart_domain, + list(set(ks_chart_measure_field_with_type + ks_chart_measure_field_with_type_2 + + [ks_chart_groupby_relation_field])), [ks_chart_groupby_field], + orderby=orderby, limit=limit, lazy=False) + except Exception as e: + ks_chart_records = [] + pass + ks_chart_data['groupby'] = ks_chart_groupby_field + if ks_chart_groupby_type == "relational_type": + ks_chart_data['groupByIds'] = [] + + for res in ks_chart_records: + is_ks_index = False + ks_index = False + if all(measure_field in res for measure_field in ks_chart_measure_field): + if ks_chart_groupby_type == "relational_type": + if res[ks_chart_groupby_field]: + ks_chart_data['groupByIds'].append(res[ks_chart_groupby_field][0]) + label = res[ks_chart_groupby_field][1] + else: + label = res[ks_chart_groupby_field] + elif ks_chart_groupby_type == "selection": + selection = res[ks_chart_groupby_field] + if selection: + label = dict(self.env[ks_model_name].fields_get(allfields=[ks_chart_groupby_field]) + [ks_chart_groupby_field]['selection'])[selection] + else: + label = selection + else: + label = res[ks_chart_groupby_field] + + ks_chart_data['domains'].append(res.get('__domain', [])) + if label in ks_chart_data['labels']: + ks_index = ks_chart_data['labels'].index(label) + is_ks_index = True + + else: + ks_chart_data['labels'].append(label) + + counter = 0 + if ks_chart_measure_field: + if ks_chart_measure_field_2: + index = 0 + for field_rec in ks_chart_measure_field_2: + ks_groupby_equal_measures = res.get(ks_chart_groupby_relation_field + "_count", + False) or res.get("__count", False) \ + if res.get(ks_chart_groupby_relation_field + "_count", False) or res.get("__count", + False) \ + and ks_chart_measure_field_2_ids[index] == ks_chart_groupby_relation_field_id \ + else 1 + try: + if res.get('__count', False): + data = res[field_rec] * ks_groupby_equal_measures \ + if chart_count == 'sum' else \ + res[field_rec] + else: + data = 0 + if is_ks_index: + if chart_count == 'sum': + ks_chart_data['datasets'][counter]['data'][ks_index] += data + else: + ks_chart_data['datasets'][counter]['data'][ks_index] = \ + (ks_chart_data['datasets'][counter]['data'][ks_index] + data) / 2 + counter += 1 + index += 1 + continue + except ZeroDivisionError: + data = 0 + ks_chart_data['datasets'][counter]['data'].append(data) + counter += 1 + index += 1 + + index = 0 + for field_rec in ks_chart_measure_field: + ks_groupby_equal_measures = res.get(ks_chart_groupby_relation_field + "_count", + False) or res.get("__count", False) \ + if res.get(ks_chart_groupby_relation_field + "_count", False) or res.get("__count", False) \ + and ks_chart_measure_field_ids[index] == ks_chart_groupby_relation_field_id \ + else 1 + try: + if res.get('__count', False): + data = res[field_rec] * ks_groupby_equal_measures \ + if chart_count == 'sum' else \ + res[field_rec] + else: + data = 0 + if is_ks_index: + if chart_count == 'sum': + ks_chart_data['datasets'][counter]['data'][ks_index] += data + else: + ks_chart_data['datasets'][counter]['data'][ks_index] = \ + (ks_chart_data['datasets'][counter]['data'][ks_index] + data) / 2 + counter += 1 + index += 1 + continue + except ZeroDivisionError: + data = 0 + ks_chart_data['datasets'][counter]['data'].append(data) + counter += 1 + index += 1 + + else: + if res.get('__count'): + count = res[ks_chart_groupby_relation_field + "_count"] \ + if res.get((ks_chart_groupby_relation_field + "_count"), False) else res['__count'] + else: + count = 0 + data = count + ks_chart_data['datasets'][0]['data'].append(data) + + return ks_chart_data + + @api.model + def ks_fetch_drill_down_data(self, item_id, domain, sequence): + + record = self.browse(int(item_id)) + ks_chart_data = {'labels': [], 'datasets': [], 'ks_show_second_y_scale': False, 'domains': [], + 'previous_domain': domain, 'ks_currency': 0, 'ks_field': "", 'ks_selection': "", } + if record.ks_unit and record.ks_unit_selection == 'monetary': + ks_chart_data['ks_selection'] += record.ks_unit_selection + ks_chart_data['ks_currency'] += record.env.user.company_id.currency_id.id + elif record.ks_unit and record.ks_unit_selection == 'custom': + ks_chart_data['ks_selection'] += record.ks_unit_selection + if record.ks_chart_unit: + ks_chart_data['ks_field'] += record.ks_chart_unit + + # If count chart data type: + action_lines = record.ks_action_lines.sorted(key=lambda r: r.sequence) + action_line = action_lines[sequence] + ks_chart_type = action_line.ks_chart_type if action_line.ks_chart_type else record.ks_dashboard_item_type + ks_list_view_data = {'label': [], 'type': 'grouped', + 'data_rows': [], 'model': record.ks_model_name, 'previous_domain': domain, } + ks_action_name = action_line['ks_action_item_name'] + ks_action_id = action_line['id'] + if action_line.ks_chart_type == 'ks_list_view': + if record.ks_dashboard_item_type == 'ks_list_view': + ks_chart_list_measure = record.ks_list_view_group_fields + else: + ks_chart_list_measure = record.ks_chart_measure_field + + ks_list_fields = [] + orderby = action_line.ks_sort_by_field.name if action_line.ks_sort_by_field else False + if action_line.ks_sort_by_order: + orderby = orderby + " " + action_line.ks_sort_by_order + limit = action_line.ks_record_limit \ + if action_line.ks_record_limit and action_line.ks_record_limit > 0 else False + ks_count = 0 + for ks in record.ks_action_lines: + ks_count += 1 + if action_line.ks_item_action_field.ttype == 'many2one': + ks_list_view_data['list_view_type'] = 'relational_type' + ks_list_view_data['groupby'] = action_line.ks_item_action_field.name + ks_list_fields.append(action_line.ks_item_action_field.name) + ks_list_view_data['label'].append(action_line.ks_item_action_field.field_description) + for res in ks_chart_list_measure: + ks_list_fields.append(res.name) + ks_list_view_data['label'].append(res.field_description) + + ks_list_view_records = self.env[record.ks_model_name] \ + .read_group(domain, ks_list_fields, [action_line.ks_item_action_field.name], orderby=orderby, + limit=limit, lazy=False) + for res in ks_list_view_records: + + counter = 0 + data_row = {'id': res[action_line.ks_item_action_field.name][0] if res[ + action_line.ks_item_action_field.name] else res[action_line.ks_item_action_field.name], + 'data': [], + 'domain': json.dumps(res['__domain']), 'sequence': sequence + 1, + 'last_seq': ks_count, 'ks_column_type': []} + for field_rec in ks_list_fields: + if counter == 0: + data_row['data'].append(res[field_rec][1] if res[field_rec] else "False") + else: + data_row['data'].append(res[field_rec]) + counter += 1 + data_row['ks_column_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['data_rows'].append(data_row) + + elif action_line.ks_item_action_field.ttype == 'date' or \ + action_line.ks_item_action_field.ttype == 'datetime': + ks_list_view_data['list_view_type'] = 'date_type' + ks_list_field = [] + ks_list_view_data[ + 'groupby'] = action_line.ks_item_action_field.name + ':' + action_line.ks_item_action_date_groupby + ks_list_field.append( + action_line.ks_item_action_field.name + ':' + action_line.ks_item_action_date_groupby) + ks_list_fields.append(action_line.ks_item_action_field.name) + ks_list_view_data['label'].append( + action_line.ks_item_action_field.field_description) + for res in ks_chart_list_measure: + ks_list_fields.append(res.name) + ks_list_field.append(res.name) + ks_list_view_data['label'].append(res.field_description) + + ks_list_view_records = self.env[record.ks_model_name] \ + .read_group(domain, ks_list_fields, [action_line.ks_item_action_field.name + ':' + + action_line.ks_item_action_date_groupby], orderby=orderby, + limit=limit, lazy=False) + + for res in ks_list_view_records: + counter = 0 + data_row = {'data': [], + 'domain': json.dumps(res['__domain']), 'sequence': sequence + 1, + 'last_seq': ks_count, 'ks_column_type': []} + for field_rec in ks_list_field: + data_row['data'].append(res[field_rec]) + data_row['ks_column_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['data_rows'].append(data_row) + + elif action_line.ks_item_action_field.ttype == 'selection': + ks_list_view_data['list_view_type'] = 'selection' + ks_list_view_data['groupby'] = action_line.ks_item_action_field.name + ks_selection_field = action_line.ks_item_action_field.name + ks_list_view_data['label'].append(action_line.ks_item_action_field.field_description) + for res in ks_chart_list_measure: + ks_list_fields.append(res.name) + ks_list_view_data['label'].append(res.field_description) + + ks_list_view_records = self.env[record.ks_model_name] \ + .read_group(domain, ks_list_fields, [action_line.ks_item_action_field.name], orderby=orderby, + limit=limit, lazy=False) + for res in ks_list_view_records: + counter = 0 + data_row = {'data': [], + 'domain': json.dumps(res['__domain']), 'sequence': sequence + 1, + 'last_seq': ks_count, 'ks_column_type': []} + if res[ks_selection_field]: + data_row['data'].append(dict( + self.env[record.ks_model_name].fields_get(allfields=ks_selection_field) + [ks_selection_field]['selection'])[res[ks_selection_field]]) + else: + data_row['data'].append(" ") + data_row['ks_column_type'].append(self.ks_chart_relation_groupby.ttype) + for field_rec in ks_list_fields: + data_row['data'].append(res[field_rec]) + data_row['ks_column_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['data_rows'].append(data_row) + + else: + ks_list_view_data['list_view_type'] = 'other' + ks_list_view_data['groupby'] = action_line.ks_item_action_field.name + ks_list_fields.append(action_line.ks_item_action_field.name) + ks_list_view_data['label'].append(action_line.ks_item_action_field.field_description) + for res in ks_chart_list_measure: + if action_line.ks_item_action_field.name != res.name: + ks_list_view_data['label'].append(res.field_description) + ks_list_fields.append(res.name) + + ks_list_view_records = self.env[record.ks_model_name] \ + .read_group(domain, ks_list_fields, [action_line.ks_item_action_field.name], orderby=orderby, + limit=limit, lazy=False) + for res in ks_list_view_records: + if all(list_fields in res for list_fields in ks_list_fields): + counter = 0 + data_row = {'id': action_line.ks_item_action_field.name, 'data': [], + 'domain': json.dumps(res['__domain']), 'sequence': sequence + 1, + 'last_seq': ks_count, 'ks_column_type': []} + + for field_rec in ks_list_fields: + if counter == 0: + data_row['data'].append(res[field_rec]) + else: + if action_line.ks_item_action_field.name == field_rec: + data_row['data'].append(res[field_rec] * ( + res.get(field_rec + '_count', False) if res.get(field_rec + '_count', + False) else res.get('__count'))) + else: + data_row['data'].append(res[field_rec]) + counter += 1 + data_row['ks_column_type'].append(self.ks_chart_relation_groupby.ttype) + ks_list_view_data['data_rows'].append(data_row) + if record.ks_multiplier_active: + for ks_multiplier in record.ks_multiplier_lines: + label = ks_multiplier.ks_multiplier_fields.field_description + if label in ks_list_view_data['label']: + index = ks_list_view_data['label'].index(label) + for i in range(0, len(ks_list_view_data['data_rows'])): + data_values = ks_list_view_data['data_rows'][i]['data'][ + index] * ks_multiplier.ks_multiplier_value + ks_list_view_data['data_rows'][i]['data'][index] = data_values + return {"ks_list_view_data": json.dumps(ks_list_view_data), "ks_list_view_type": "grouped", + 'sequence': sequence + 1, 'ks_action_name': "".join(ks_action_name.split(" "))} + else: + ks_chart_measure_field = [] + ks_chart_measure_field_with_type = [] + ks_chart_measure_field_ids = [] + ks_chart_measure_field_2 = [] + ks_chart_measure_field_with_type_2 = [] + ks_chart_measure_field_2_ids = [] + if record.ks_chart_data_count_type == "count": + if not action_line.ks_sort_by_field: + ks_chart_measure_field_with_type.append('count:count(id)') + elif action_line.ks_sort_by_field: + if not action_line.ks_sort_by_field.ttype == "datetime": + ks_chart_measure_field_with_type.append(action_line.ks_sort_by_field.name + ':' + 'sum') + else: + ks_chart_measure_field_with_type.append(action_line.ks_sort_by_field.name) + + ks_chart_data['datasets'].append({'data': [], 'label': "Count"}) + else: + if ks_chart_type == 'ks_bar_chart': + if record.ks_chart_measure_field_2: + ks_chart_data['ks_show_second_y_scale'] = True + + for res in record.ks_chart_measure_field_2: + if record.ks_chart_data_count_type == 'sum': + ks_data_count_type = 'sum' + elif record.ks_chart_data_count_type == 'average': + ks_data_count_type = 'avg' + else: + raise ValidationError(_('Please chose any Data Type!')) + ks_chart_measure_field_2.append(res.name) + ks_chart_measure_field_with_type_2.append(res.name + ':' + ks_data_count_type) + ks_chart_measure_field_2_ids.append(res.id) + ks_chart_data['datasets'].append( + {'data': [], 'label': res.field_description, 'type': 'line', 'yAxisID': 'y-axis-1'}) + if record.ks_dashboard_item_type == 'ks_list_view': + for res in record.ks_list_view_group_fields: + ks_chart_measure_field.append(res.name) + ks_chart_measure_field_with_type.append(res.name + ':' + 'sum') + ks_chart_measure_field_ids.append(res.id) + ks_chart_data['datasets'].append({'data': [], 'label': res.field_description}) + else: + for res in record.ks_chart_measure_field: + if record.ks_chart_data_count_type == 'sum': + ks_data_count_type = 'sum' + elif record.ks_chart_data_count_type == 'average': + ks_data_count_type = 'avg' + else: + raise ValidationError(_('Please chose any Data Type!')) + ks_chart_measure_field.append(res.name) + ks_chart_measure_field_with_type.append(res.name + ':' + ks_data_count_type) + ks_chart_measure_field_ids.append(res.id) + ks_chart_data['datasets'].append({'data': [], 'label': res.field_description}) + + ks_chart_groupby_relation_field = action_line.ks_item_action_field.name + ks_chart_relation_type = action_line.ks_item_action_field_type + ks_chart_date_group_by = action_line.ks_item_action_date_groupby + ks_chart_groupby_relation_field_id = action_line.ks_item_action_field.id + # orderby = action_line.ks_sort_by_field.name if action_line.ks_sort_by_field else "id" + if record.ks_chart_data_count_type == "count" and not self.ks_fill_temporal and not action_line.ks_sort_by_field: + orderby = 'count' + else: + orderby = action_line.ks_sort_by_field.name if action_line.ks_sort_by_field else False + if action_line.ks_sort_by_order: + orderby = orderby + " " + action_line.ks_sort_by_order + limit = action_line.ks_record_limit if action_line.ks_record_limit and action_line.ks_record_limit > 0 else False + + if ks_chart_type != "ks_bar_chart": + ks_chart_measure_field_2 = [] + ks_chart_measure_field_2_ids = [] + + ks_chart_data = record.ks_fetch_chart_data(record.ks_model_name, domain, + ks_chart_measure_field_with_type, + ks_chart_measure_field_with_type_2, + ks_chart_measure_field, + ks_chart_measure_field_2, + ks_chart_groupby_relation_field, ks_chart_date_group_by, + ks_chart_relation_type, + orderby, limit, record.ks_chart_data_count_type, + ks_chart_measure_field_ids, + ks_chart_measure_field_2_ids, ks_chart_groupby_relation_field_id, + ks_chart_data) + if record.ks_multiplier_active: + for ks_multiplier in record.ks_multiplier_lines: + for i in range(0, len(ks_chart_data['datasets'])): + if ks_multiplier.ks_multiplier_fields.field_description in ks_chart_data['datasets'][i][ + 'label']: + data_values = ks_chart_data['datasets'][i]['data'] + data_values = list(map(lambda x: ks_multiplier.ks_multiplier_value * x, data_values)) + ks_chart_data['datasets'][i]['data'] = data_values + return { + 'ks_chart_data': json.dumps(ks_chart_data), + 'ks_chart_type': ks_chart_type, + 'ks_action_name': "".join(ks_action_name.split(" ")), + 'ks_action_id':ks_action_id, + 'sequence': sequence + 1 + } + + @api.model + def ks_get_start_end_date(self, model_name, ks_chart_groupby_relation_field, ttype, ks_chart_domain, + ks_goal_domain): + ks_start_end_date = {} + try: + model_field_start_date = \ + self.env[model_name].search(ks_chart_domain + [(ks_chart_groupby_relation_field, '!=', False)], limit=1, + order=ks_chart_groupby_relation_field + " ASC")[ + ks_chart_groupby_relation_field] + model_field_end_date = \ + self.env[model_name].search(ks_chart_domain + [(ks_chart_groupby_relation_field, '!=', False)], limit=1, + order=ks_chart_groupby_relation_field + " DESC")[ + ks_chart_groupby_relation_field] + except Exception as e: + model_field_start_date = model_field_end_date = False + pass + # if model_field_start_date and model_field_end_date: + # goal_model_start_date = \ + # self.env['ks_dashboard_ninja.item_goal'].search([('ks_goal_date', '>=', model_field_start_date.strftime("%Y-%m-%d")), + # ('ks_goal_date', '<=', model_field_end_date.strftime("%Y-%m-%d"))], limit=1, + # order='ks_goal_date ASC')['ks_goal_date'] + # goal_model_end_date = \ + # self.env['ks_dashboard_ninja.item_goal'].search([('ks_goal_date', '>=', model_field_start_date.strftime("%Y-%m-%d")), + # ('ks_goal_date', '<=', model_field_end_date.strftime("%Y-%m-%d"))], limit=1, + # order='ks_goal_date DESC')['ks_goal_date'] + # else: + + goal_model_start_date = \ + self.env['ks_dashboard_ninja.item_goal'].search(ks_goal_domain, limit=1, + order='ks_goal_date ASC')['ks_goal_date'] + goal_model_end_date = \ + self.env['ks_dashboard_ninja.item_goal'].search(ks_goal_domain, limit=1, + order='ks_goal_date DESC')['ks_goal_date'] + + if model_field_start_date and ttype == "date": + model_field_end_date = datetime.combine(model_field_end_date, datetime.min.time()) + model_field_start_date = datetime.combine(model_field_start_date, datetime.min.time()) + + if model_field_start_date and goal_model_start_date: + goal_model_start_date = datetime.combine(goal_model_start_date, datetime.min.time()) + goal_model_end_date = datetime.combine(goal_model_end_date, datetime.max.time()) + if model_field_start_date < goal_model_start_date: + ks_start_end_date['start_date'] = model_field_start_date.strftime("%Y-%m-%d 00:00:00") + else: + ks_start_end_date['start_date'] = goal_model_start_date.strftime("%Y-%m-%d 00:00:00") + if model_field_end_date > goal_model_end_date: + ks_start_end_date['end_date'] = model_field_end_date.strftime("%Y-%m-%d 23:59:59") + else: + ks_start_end_date['end_date'] = goal_model_end_date.strftime("%Y-%m-%d 23:59:59") + + elif model_field_start_date and not goal_model_start_date: + ks_start_end_date['start_date'] = model_field_start_date.strftime("%Y-%m-%d 00:00:00") + ks_start_end_date['end_date'] = model_field_end_date.strftime("%Y-%m-%d 23:59:59") + + elif goal_model_start_date and not model_field_start_date: + ks_start_end_date['start_date'] = goal_model_start_date.strftime("%Y-%m-%d 00:00:00") + ks_start_end_date['end_date'] = goal_model_end_date.strftime("%Y-%m-%d 23:59:59") + else: + ks_start_end_date['start_date'] = False + ks_start_end_date['end_date'] = False + + return ks_start_end_date + + # List View pagination + @api.model + def ks_get_next_offset(self, ks_item_id, offset, item_domain=[]): + record = self.browse(ks_item_id) + ks_offset = offset['offset'] + ks_list_domain = self.ks_convert_into_proper_domain(record.ks_domain, self, item_domain) + if self.ks_list_view_type == 'grouped': + orderby = record.ks_sort_by_field.id + sort_order = record.ks_sort_by_order + ks_list_view_data = self.get_list_view_record(orderby, sort_order, ks_list_domain, ksoffset=int(ks_offset)) + + else: + ks_list_view_data = self.ks_fetch_list_view_data(record, ks_list_domain, offset=int(ks_offset)) + + return { + 'ks_list_view_data': json.dumps(ks_list_view_data), + 'offset': int(ks_offset) + 1, + 'next_offset': int(ks_offset) + len(ks_list_view_data['data_rows']), + 'limit': record.ks_record_data_limit if record.ks_record_data_limit else 0, + } + + @api.model + def get_sorted_month(self, display_format, ftype='date'): + query = """ + with d as (SELECT date_trunc(%(aggr)s, generate_series) AS timestamp FROM generate_series + (%(timestamp_begin)s::TIMESTAMP , %(timestamp_end)s::TIMESTAMP , %(aggr1)s::interval )) + select timestamp from d group by timestamp order by timestamp + """ + self.env.cr.execute(query, { + 'timestamp_begin': "2020-01-01 00:00:00", + 'timestamp_end': "2020-12-31 00:00:00", + 'aggr': 'month', + 'aggr1': '1 month' + }) + + dates = self.env.cr.fetchall() + locale = self._context.get('lang') or 'en_US' + tz_convert = self._context.get('tz') + return [self.format_label(d[0], ftype, display_format, tz_convert, locale) for d in dates] + + # Fix Order BY : maybe revert old code + @api.model + def generate_timeserise(self, date_begin, date_end, aggr, ftype='date'): + query = """ + with d as (SELECT date_trunc(%(aggr)s, generate_series) AS timestamp FROM generate_series + (%(timestamp_begin)s::TIMESTAMP , %(timestamp_end)s::TIMESTAMP , '1 hour'::interval )) + select timestamp from d group by timestamp order by timestamp + """ + + self.env.cr.execute(query, { + 'timestamp_begin': date_begin, + 'timestamp_end': date_end, + 'aggr': aggr, + 'aggr1': '1 ' + aggr + }) + dates = self.env.cr.fetchall() + display_formats = { + # Careful with week/year formats: + # - yyyy (lower) must always be used, except for week+year formats + # - YYYY (upper) must always be used for week+year format + # e.g. 2006-01-01 is W52 2005 in some locales (de_DE), + # and W1 2006 for others + # + # Mixing both formats, e.g. 'MMM YYYY' would yield wrong results, + # such as 2006-01-01 being formatted as "January 2005" in some locales. + # Cfr: http://babel.pocoo.org/en/latest/dates.html#date-fields + 'minute': 'hh:mm dd MMM', + 'hour': 'hh:00 dd MMM', + 'day': 'dd MMM yyyy', # yyyy = normal year + 'week': "'W'w YYYY", # w YYYY = ISO week-year + 'month': 'MMMM yyyy', + 'quarter': 'QQQ yyyy', + 'year': 'yyyy', + } + + display_format = display_formats[aggr] + locale = self._context.get('lang') or 'en_US' + tz_convert = self._context.get('tz') + return [self.format_label(d[0], ftype, display_format, tz_convert, locale) for d in dates] + + @api.model + def format_label(self, value, ftype, display_format, tz_convert, locale): + + tzinfo = None + if ftype == 'datetime': + if tz_convert: + value = pytz.timezone(self._context['tz']).localize(value) + tzinfo = value.tzinfo + return babel.dates.format_datetime(value, format=display_format, tzinfo=tzinfo, locale=locale) + else: + + if tz_convert: + value = pytz.timezone(self._context['tz']).localize(value) + tzinfo = value.tzinfo + return babel.dates.format_date(value, format=display_format, locale=locale) + + def ks_sort_sub_group_by_records(self, ks_data, field_type, ks_chart_date_groupby, ks_sort_by_order, + ks_chart_date_sub_groupby): + if ks_data: + reverse = False + if ks_sort_by_order == 'DESC': + reverse = True + + for data in ks_data: + if field_type == 'date_type': + if ks_chart_date_groupby in ['minute', 'hour']: + if ks_chart_date_sub_groupby in ["month", "week", "quarter", "year"]: + ks_sorted_months = self.get_sorted_month("MMM") + data['value'].sort(key=lambda x: int( + str(ks_sorted_months.index(x['x'].split(" ")[2]) + 1) + x['x'].split(" ")[1] + + x['x'].split(" ")[0].replace(":", "")), reverse=reverse) + else: + data['value'].sort(key=lambda x: int(x['x'].replace(":", "")), reverse=reverse) + elif ks_chart_date_groupby == 'day' and ks_chart_date_sub_groupby in ["quarter", "year"]: + ks_sorted_days = self.generate_timeserise("2020-01-01 00:00:00", "2020-12-31 00:00:00", + 'day', "date") + b = [" ".join(x.split(" ")[0:2]) for x in ks_sorted_days] + data['value'].sort(key=lambda x: b.index(x['x']), reverse=reverse) + elif ks_chart_date_groupby == 'day' and ks_chart_date_sub_groupby not in ["quarter", "year"]: + data['value'].sort(key=lambda i: int(i['x']), reverse=reverse) + elif ks_chart_date_groupby == 'week': + data['value'].sort(key=lambda i: int(i['x'][1:]), reverse=reverse) + elif ks_chart_date_groupby == 'month': + ks_sorted_months = self.generate_timeserise("2020-01-01 00:00:00", "2020-12-31 00:00:00", + 'month', "date") + b = [" ".join(x.split(" ")[0:1]) for x in ks_sorted_months] + data['value'].sort(key=lambda x: b.index(x['x']), reverse=reverse) + elif ks_chart_date_groupby == 'quarter': + ks_sorted_months = self.generate_timeserise("2020-01-01 00:00:00", "2020-12-31 00:00:00", + 'quarter', "date") + b = [" ".join(x.split(" ")[:-1]) for x in ks_sorted_months] + data['value'].sort(key=lambda x: b.index(x['x']), reverse=reverse) + elif ks_chart_date_groupby == 'year': + data['value'].sort(key=lambda i: int(i['x']), reverse=reverse) + else: + data['value'].sort(key=lambda i: i['x'], reverse=reverse) + + return ks_data + + @api.onchange('ks_domain_2') + def ks_onchange_check_domain_2_onchange(self): + if self.ks_domain_2: + proper_domain_2 = [] + try: + ks_domain_2 = self.ks_domain_2 + if "%UID" in ks_domain_2: + ks_domain_2 = ks_domain_2.replace("%UID", str(self.env.user.id)) + if "%MYCOMPANY" in ks_domain_2: + ks_domain_2 = ks_domain_2.replace("%MYCOMPANY", str(self.env.company.id)) + ks_domain_2 = safe_eval(ks_domain_2) + + for element in ks_domain_2: + proper_domain_2.append(element) if type(element) != list else proper_domain_2.append(tuple(element)) + self.env[self.ks_model_name_2].search_count(proper_domain_2) + except Exception: + raise UserError("Invalid Domain") + + @api.onchange('ks_domain') + def ks_onchange_check_domain_onchange(self): + if self.ks_domain: + proper_domain = [] + try: + ks_domain = self.ks_domain + if "%UID" in ks_domain: + ks_domain = ks_domain.replace("%UID", str(self.env.user.id)) + if "%MYCOMPANY" in ks_domain: + ks_domain = ks_domain.replace("%MYCOMPANY", str(self.env.company.id)) + ks_domain = safe_eval(ks_domain) + for element in ks_domain: + proper_domain.append(element) if type(element) != list else proper_domain.append(tuple(element)) + self.env[self.ks_model_name].search_count(proper_domain) + except Exception: + raise UserError("Invalid Domain") + + # @api.onchange('ks_dashboard_item_type', 'ks_model_id') + # def onchange_dashboard_item_type(self): + # if self.ks_dashboard_item_type == 'ks_map_view' and self.ks_model_id: + # models = ['sale.order', 'purchase.order', 'account.move', 'stock.picking', 'crm.lead'] + # has_partner = self.ks_model_id.model in models + # if not has_partner: + # raise UserError(_("Selected model is not supported for Map View.")) + + @api.depends('ks_dashboard_item_type', 'ks_model_id') + def _compute_map_partners(self): + for rec in self: + rec.ks_partners_map = "" + domain = [] + if rec.ks_dashboard_item_type == 'ks_map_view' and rec.ks_model_name: + if rec.ks_domain: + domain = rec._get_domain() + records = self.env[rec.ks_model_name].search(domain) + if records: + if rec.ks_model_name == 'res.partner': + rec.ks_partners_map = records.ids + else: + if 'partner_id' in records: + partners = records.mapped('partner_id') + rec.ks_partners_map = partners.ids + else: + raise UserError(_("Selected model is not supported for Map View.")) + + + def _get_domain(self): + ks_domain = ast.literal_eval(self.ks_domain) + domain = [] + for rec in ks_domain: + domain.append(tuple(rec)) + return domain + + @api.depends('ks_country_id') + def _compute_bounds(self): + for rec in self: + rec.ks_bounds = [[6.554607, 68.1097], [35.674545, 97.395358]] + new_bounds = get_country_code(rec.ks_country_code) + if new_bounds: + new_bounds = new_bounds[1] + rec.ks_bounds = [[new_bounds[1], new_bounds[0]], [new_bounds[3], new_bounds[2]]] + + +class KsDashboardItemsGoal(models.Model): + _name = 'ks_dashboard_ninja.item_goal' + _description = 'Dashboard Ninja Items Goal Lines' + + ks_goal_date = fields.Date(string="Date") + ks_goal_value = fields.Float(string="Value") + + ks_dashboard_item = fields.Many2one('ks_dashboard_ninja.item', string="Dashboard Item") + +class KsDashboardCsvGroupBy(models.Model): + _name = 'ks.dashboard.csv.group.by' + _description = 'Dashboard Ninja Group By' + _rec_name = 'name' + + ks_dashboard_csv_group_by_id = fields.Many2one('ks_dashboard_ninja.item', string="Dashboard Item") + name = fields.Char(string="Name") + ttype = fields.Selection([('char', 'char'), ('date', 'date'), ('datetime', 'datetime'), ('float', 'float'), + ('integer', 'integer')], + string='Type') + +class KsDashboardCsvNew(models.Model): + _name = 'ks.dashboard.csv.new' + _description = 'Dashboard Ninja New' + _rec_name = 'name' + + # ks_dashboard_group_by_id = fields.Many2one('ks_dashboard_ninja.item', string="Dashboard Item") + name = fields.Char(string="Name") + ttype = fields.Selection([('char', 'char'), ('date', 'date'), ('datetime', 'datetime'), ('float', 'float'), + ('integer', 'integer')], + string='Type') + + +class KsDashboardGroupBy(models.Model): + _name = 'ks.dashboard.group.by' + _description = 'Dashboard Ninja Group By' + _rec_name = 'name' + + ks_dashboard_group_by_id = fields.Many2one('ks_dashboard_ninja.item', string="Dashboard Item Id") + name = fields.Char(string="Name") + ttype = fields.Selection([('char', 'char'), ('date', 'date'), ('datetime', 'datetime'), ('float', 'float'), + ('integer', 'integer')], + string='Type') + + +class KsDashboardNew(models.Model): + _name = 'ks.dashboard.new' + _description = 'Dashboard Ninja New' + _rec_name = 'name' + + # ks_dashboard_group_by_id = fields.Many2one('ks_dashboard_ninja.item', string="Dashboard Item") + name = fields.Char(string="Name") + ttype = fields.Selection([('char', 'char'), ('date', 'date'), ('datetime', 'datetime'), ('float', 'float'), + ('integer', 'integer')], + string='Type') + + +class KsDashboardItemsActions(models.Model): + _name = 'ks_dashboard_ninja.item_action' + _description = 'Dashboard Ninja Items Action Lines' + + ks_item_action_field = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence'),('store','=',True)," + "('ttype','!=','binary'),('ttype','!=','many2many'), " + "('ttype','!=','one2many')]", + string="Action Group By") + ks_action_item_name = fields.Char(string = "Action item name" ,compute="ks_check_special_character") + + ks_item_action_field_type = fields.Char(compute="ks_get_item_action_type", compute_sudo=False) + + ks_item_action_date_groupby = fields.Selection([('minute', 'Minute'), + ('hour', 'Hour'), + ('day', 'Day'), + ('week', 'Week'), + ('month', 'Month'), + ('quarter', 'Quarter'), + ('year', 'Year'), + ], string="Group By Date") + + ks_chart_type = fields.Selection([('ks_bar_chart', 'Bar Chart'), + ('ks_horizontalBar_chart', 'Horizontal Bar Chart'), + ('ks_line_chart', 'Line Chart'), + ('ks_area_chart', 'Area Chart'), + ('ks_pie_chart', 'Pie Chart'), + ('ks_doughnut_chart', 'Doughnut Chart'), + ('ks_polarArea_chart', 'Polar Area Chart'), + ('ks_radialBar_chart', 'Radial Bar Chart'), + ('ks_scatter_chart', 'Scatter Chart'), + ('ks_list_view' , 'List View'), + ('ks_radar_view', 'Radar View'), + ('ks_flower_view', 'Flower View'), + ('ks_funnel_chart', 'Funnel Chart'), + ('ks_bullet_chart', 'Bullet Chart')], + string="Item Type") + + ks_dashboard_item_id = fields.Many2one('ks_dashboard_ninja.item', string="Dashboard Item") + ks_model_id = fields.Many2one('ir.model', related='ks_dashboard_item_id.ks_model_id') + sequence = fields.Integer(string="Sequence") + # For sorting and record limit + ks_record_limit = fields.Integer(string="Record Limit") + ks_sort_by_field = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence'),('store','=',True)," + "('ttype','!=','one2many'),('ttype','!=','many2one')," + "('ttype','!=','binary')]", + string="Sort By Field") + ks_sort_by_order = fields.Selection([('ASC', 'Ascending'), ('DESC', 'Descending')], + string="Sort Order") + + @api.depends("ks_item_action_field") + def ks_check_special_character(self): + for rec in self: + if rec.ks_item_action_field: + rec.ks_action_item_name = "item"+str(rec.sequence) + else: + rec.ks_action_item_name = "none" + + @api.depends('ks_item_action_field') + def ks_get_item_action_type(self): + for rec in self: + if rec.ks_item_action_field.ttype == 'datetime' or rec.ks_item_action_field.ttype == 'date': + rec.ks_item_action_field_type = 'date_type' + elif rec.ks_item_action_field.ttype == 'many2one': + rec.ks_item_action_field_type = 'relational_type' + elif rec.ks_item_action_field.ttype == 'selection': + rec.ks_item_action_field_type = 'selection' + + else: + rec.ks_item_action_field_type = 'none' + + @api.onchange('ks_item_action_date_groupby') + def ks_check_date_group_by(self): + for rec in self: + if rec.ks_item_action_field.ttype == 'date' and rec.ks_item_action_date_groupby in ['hour', 'minute']: + raise ValidationError(_('Action field: {} cannot be aggregated by {}').format( + rec.ks_item_action_field.display_name, rec.ks_item_action_date_groupby)) + + @api.onchange('ks_item_action_field') + def ks_onchange_item_action(self): + for rec in self: + if not (rec.ks_item_action_field.ttype == 'datetime' or rec.ks_item_action_field.ttype == 'date'): + rec.ks_item_action_date_groupby = False + +class KsDashboardItemMultiplier(models.Model): + _name = 'ks_dashboard_item.multiplier' + _description = 'Dashboard Ninja Items Multiplier Lines' + + ks_dashboard_item_id = fields.Many2one('ks_dashboard_ninja.item', string="Dashboard Item") + ks_model_id = fields.Many2one('ir.model', related='ks_dashboard_item_id.ks_model_id') + ks_multiplier_value = fields.Float(string="Multiplier", default=1) + ks_multiplier_fields = fields.Many2one('ir.model.fields', + domain="[('model_id','=',ks_model_id),('name','!=','id'),('name','!=','sequence')," + "('store','=',True),'|','|'," + "('ttype','=','integer'),('ttype','=','float')," + "('ttype','=','monetary')]", + string="Multiplier Field") + + + + ## in labels ._value is not working #### \ No newline at end of file diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_dashboard_templates.py b/third_party_addons/ks_dashboard_ninja/models/ks_dashboard_templates.py new file mode 100644 index 000000000..d313f0f1c --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_dashboard_templates.py @@ -0,0 +1,41 @@ +from odoo import models, fields, api, _ + + +class KsDashboardNinjaTemplate(models.Model): + _name = 'ks_dashboard_ninja.board_template' + _description = 'Dashboard Ninja Template' + + name = fields.Char() + ks_gridstack_config = fields.Char() + ks_item_count = fields.Integer() + ks_template_type = fields.Selection([('ks_default', 'Predefined'), ('ks_custom', 'Custom')], + string="Template Format") + ks_dashboard_item_ids = fields.One2many('ks_dashboard_ninja.item', 'ks_dashboard_board_template_id', + string="Template Type") + ks_dashboard_board_id = fields.Many2one('ks_dashboard_ninja.board', string="Dashboard", help=""" + Items Configuration and their position in the dashboard will be copied from the selected dashboard + and will be saved as template. + """) + + @api.model_create_multi + def create(self, vals_list): + for val in vals_list: + if val.get('ks_template_type', False) and val.get('ks_dashboard_board_id', False): + dashboard_id = self.env['ks_dashboard_ninja.board'].browse(val.get('ks_dashboard_board_id')) + val['ks_gridstack_config'] = dashboard_id.ks_gridstack_config + val['ks_item_count'] = len(dashboard_id.ks_dashboard_items_ids) + val['ks_dashboard_item_ids'] = [(4, x.copy({'ks_dashboard_ninja_board_id': False}).id) for x in + dashboard_id.ks_dashboard_items_ids] + recs = super(KsDashboardNinjaTemplate, self).create(vals_list) + return recs + + def write(self, val): + if val.get('ks_dashboard_board_id', False): + dashboard_id = self.env['ks_dashboard_ninja.board'].browse(val.get('ks_dashboard_board_id')) + val['ks_gridstack_config'] = dashboard_id.ks_gridstack_config + val['ks_item_count'] = len(dashboard_id.ks_dashboard_items_ids) + val['ks_dashboard_item_ids'] = [(6, 0, + [x.copy({'ks_dashboard_ninja_board_id': False}).id for x in + dashboard_id.ks_dashboard_items_ids])] + recs = super(KsDashboardNinjaTemplate, self).write(val) + return recs diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_dn_to_do_item.py b/third_party_addons/ks_dashboard_ninja/models/ks_dn_to_do_item.py new file mode 100644 index 000000000..78eaa1376 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_dn_to_do_item.py @@ -0,0 +1,141 @@ +import json +from odoo import models, fields, api, _ +import copy +import re +from odoo.exceptions import ValidationError, UserError + +class KsDashboardNinjaItems(models.Model): + _inherit = 'ks_dashboard_ninja.item' + + ks_to_do_preview = fields.Char("To Do Preview", default="To Do Preview") + ks_dn_header_lines = fields.One2many('ks_to.do.headers', 'ks_dn_item_id') + ks_to_do_data = fields.Char(string="To Do Data in JSon", compute='ks_get_to_do_view_data', compute_sudo=False) + ks_header_bg_color = fields.Char(string="Header Background Color", default="#8e24aa,0.99", + help=' Select the background color with transparency. ') + + @api.depends('ks_dn_header_lines', 'ks_dashboard_item_type') + def ks_get_to_do_view_data(self): + for rec in self: + ks_to_do_data = rec._ksGetToDOData() + rec.ks_to_do_data = ks_to_do_data + + def _ksGetToDOData(self): + ks_to_do_data = { + 'label': [], + 'ks_link': [], + 'ks_href_id': [], + 'ks_section_id': [], + 'ks_content': {}, + 'ks_content_record_id': {}, + 'ks_content_active': {} + } + + if self.ks_dn_header_lines: + for ks_dn_header_line in self.ks_dn_header_lines: + ks_to_do_header_label = ks_dn_header_line.ks_to_do_header[:] + ks_to_do_data['label'].append(ks_to_do_header_label) + ks_dn_header_line_id = str(ks_dn_header_line.id) + if type(ks_dn_header_line.id).__name__ != 'int' and ks_dn_header_line.id.ref != None: + ks_dn_header_line_id = ks_dn_header_line.id.ref + if ' ' in ks_dn_header_line.ks_to_do_header: + ks_temp = ks_dn_header_line.ks_to_do_header.replace(" ", "") + ks_to_do_data['ks_link'].append('#' + ks_temp + ks_dn_header_line_id) + ks_to_do_data['ks_href_id'].append(ks_temp + str(ks_dn_header_line.id)) + + elif ks_dn_header_line.ks_to_do_header[0].isdigit(): + ks_temp = ks_dn_header_line.ks_to_do_header.replace( + ks_dn_header_line.ks_to_do_header[0], 'z') + ks_to_do_data['ks_link'].append('#' + ks_temp + ks_dn_header_line_id) + ks_to_do_data['ks_href_id'].append(ks_temp + str(ks_dn_header_line.id)) + else: + ks_to_do_data['ks_link'].append('#' + ks_dn_header_line.ks_to_do_header + ks_dn_header_line_id) + ks_to_do_data['ks_href_id'].append(ks_dn_header_line.ks_to_do_header + str(ks_dn_header_line.id)) + ks_to_do_data['ks_section_id'].append(str(ks_dn_header_line.id)) + if len(ks_dn_header_line.ks_to_do_description_lines): + for ks_to_do_description_line in ks_dn_header_line.ks_to_do_description_lines: + if ' ' in ks_dn_header_line.ks_to_do_header or ks_dn_header_line.ks_to_do_header[0].isdigit(): + if ks_to_do_data['ks_content'].get(ks_temp + + str(ks_dn_header_line.id), False): + + ks_to_do_data['ks_content'][ks_temp + + str(ks_dn_header_line.id)].append( + ks_to_do_description_line.ks_description) + ks_to_do_data['ks_content_record_id'][ks_temp + + str(ks_dn_header_line.id)].append( + str(ks_to_do_description_line.id)) + ks_to_do_data['ks_content_active'][ks_temp + + str(ks_dn_header_line.id)].append( + str(ks_to_do_description_line.ks_active)) + else: + ks_to_do_data['ks_content'][ks_temp + + str(ks_dn_header_line.id)] = [ + ks_to_do_description_line.ks_description] + ks_to_do_data['ks_content_record_id'][ks_temp + + str(ks_dn_header_line.id)] = [ + str(ks_to_do_description_line.id)] + ks_to_do_data['ks_content_active'][ks_temp + + str(ks_dn_header_line.id)] = [ + str(ks_to_do_description_line.ks_active)] + else: + if ks_to_do_data['ks_content'].get(ks_dn_header_line.ks_to_do_header + + str(ks_dn_header_line.id), False): + + ks_to_do_data['ks_content'][ks_dn_header_line.ks_to_do_header + + str(ks_dn_header_line.id)].append( + ks_to_do_description_line.ks_description) + ks_to_do_data['ks_content_record_id'][ks_dn_header_line.ks_to_do_header + + str(ks_dn_header_line.id)].append( + str(ks_to_do_description_line.id)) + ks_to_do_data['ks_content_active'][ks_dn_header_line.ks_to_do_header + + str(ks_dn_header_line.id)].append( + str(ks_to_do_description_line.ks_active)) + else: + ks_to_do_data['ks_content'][ks_dn_header_line.ks_to_do_header + + str(ks_dn_header_line.id)] = [ + ks_to_do_description_line.ks_description] + ks_to_do_data['ks_content_record_id'][ks_dn_header_line.ks_to_do_header + + str(ks_dn_header_line.id)] = [ + str(ks_to_do_description_line.id)] + ks_to_do_data['ks_content_active'][ks_dn_header_line.ks_to_do_header + + str(ks_dn_header_line.id)] = [ + str(ks_to_do_description_line.ks_active)] + + ks_to_do_data = json.dumps(ks_to_do_data) + else: + ks_to_do_data = False + return ks_to_do_data + + + + +class KsToDoheaders(models.Model): + _name = 'ks_to.do.headers' + _description = "to do headers" + + ks_dn_item_id = fields.Many2one('ks_dashboard_ninja.item') + ks_to_do_header = fields.Char('Header') + ks_to_do_description_lines = fields.One2many('ks_to.do.description', 'ks_to_do_header_id') + + @api.constrains('ks_to_do_header') + def ks_to_do_header_check(self): + for rec in self: + if rec.ks_to_do_header: + ks_check = bool(re.match('^[A-Z, a-z,0-9,_]+$', rec.ks_to_do_header)) + if not ks_check: + raise ValidationError(_("Special characters are not allowed only string and digits allow for section header")) + + @api.onchange('ks_to_do_header') + def ks_to_do_header_onchange(self): + for rec in self: + if rec.ks_to_do_header: + ks_check = bool(re.match('^[A-Z, a-z,0-9,_]+$', rec.ks_to_do_header)) + if not ks_check: + raise ValidationError(_("Special characters are not allowed only string and digits allow for section header")) + +class KsToDODescription(models.Model): + _name = 'ks_to.do.description' + _description = 'to do description' + + ks_to_do_header_id = fields.Many2one('ks_to.do.headers') + ks_description = fields.Text('Description') + ks_active = fields.Boolean('Active Description', default=True) diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_import_dashboard.py b/third_party_addons/ks_dashboard_ninja/models/ks_import_dashboard.py new file mode 100644 index 000000000..a201815e9 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_import_dashboard.py @@ -0,0 +1,30 @@ +import base64 +import logging +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + +_logger = logging.getLogger(__name__) + + +class KsDashboardNInjaImport(models.TransientModel): + _name = 'ks_dashboard_ninja.import' + _description = 'Import Dashboard' + + ks_import_dashboard = fields.Binary(string="Upload Dashboard", attachment=True) + ks_top_menu_id = fields.Many2one('ir.ui.menu', string="Show Under Menu", domain="[('parent_id','=',False)]", + required=True, + default=lambda self: self.env['ir.ui.menu'].search( + [('name', '=', 'My Dashboards')])) + + def ks_do_action(self): + for rec in self: + try: + ks_result = base64.b64decode(rec.ks_import_dashboard) + self.env['ks_dashboard_ninja.board'].ks_import_dashboard(ks_result, self.ks_top_menu_id) + except Exception as e: + _logger.warning("Error importing dashboard for record %s: %s", rec.id, str(e)) + raise ValidationError(_("%s") % str(e)) + return { + 'type': 'ir.actions.client', + 'tag': 'reload', + } diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_item_action.py b/third_party_addons/ks_dashboard_ninja/models/ks_item_action.py new file mode 100644 index 000000000..4e5320dcc --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_item_action.py @@ -0,0 +1,29 @@ +# -*- coding: utf-8 -*- + +from odoo import models, fields, api, _ +from odoo.exceptions import UserError, ValidationError + + +class KsDashboardNinjaBoardItemAction(models.TransientModel): + _name = 'ks_ninja_dashboard.item_action' + _description = 'Dashboard Ninja Item Actions' + + name = fields.Char() + ks_dashboard_item_ids = fields.Many2many("ks_dashboard_ninja.item", string="Dashboard Items") + ks_action = fields.Selection([('move', 'Move'), + ('duplicate', 'Duplicate'), + ], string="Action") + ks_dashboard_ninja_id = fields.Many2one("ks_dashboard_ninja.board", string="Select Dashboard") + ks_dashboard_ninja_ids = fields.Many2many("ks_dashboard_ninja.board", string="Select Dashboards") + + # Move or Copy item to another dashboard action + + def action_item_move_copy_action(self): + if self.ks_action == 'move': + for item in self.ks_dashboard_item_ids: + item.ks_dashboard_ninja_board_id = self.ks_dashboard_ninja_id + elif self.ks_action == 'duplicate': + # Using sudo here to allow creating same item without any security error + for dashboard_id in self.ks_dashboard_ninja_ids: + for item in self.ks_dashboard_item_ids: + item.sudo().copy({'ks_dashboard_ninja_board_id': dashboard_id.id}) diff --git a/third_party_addons/ks_dashboard_ninja/models/ks_key_fetch.py b/third_party_addons/ks_dashboard_ninja/models/ks_key_fetch.py new file mode 100644 index 000000000..34cd043fd --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/ks_key_fetch.py @@ -0,0 +1,31 @@ +import base64 +import logging +import requests +import json +from odoo import api, fields, models, _ +from odoo.exceptions import ValidationError + +_logger = logging.getLogger(__name__) + + +class KsAIDashboardFetch(models.TransientModel): + _name = 'ks_dashboard_ninja.fetch_key' + _description = 'Fetch API key' + + ks_email_id = fields.Char(string="Email ID") + ks_api_key =fields.Char(string="Generated AI API Key") + ks_show_api_key = fields.Boolean(string="Show key",default=False) + + def ks_fetch_details(self): + url = self.env['ir.config_parameter'].sudo().get_param( + 'ks_dashboard_ninja.url') + if url and self.ks_email_id: + url = url + "/api/v1/ks_dn_fetch_api" + json_data = {'email':self.ks_email_id} + ks_ai_response = requests.post(url,data=json_data) + if ks_ai_response.status_code == 200: + ks_ai_response = json.loads(ks_ai_response.text) + self.ks_api_key = ks_ai_response + self.ks_show_api_key = True + else: + raise ValidationError(_("Error generates with following status %s"),ks_ai_response.status_code) diff --git a/third_party_addons/ks_dashboard_ninja/models/res_settings.py b/third_party_addons/ks_dashboard_ninja/models/res_settings.py new file mode 100644 index 000000000..3f4f03336 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/models/res_settings.py @@ -0,0 +1,52 @@ +from odoo import api, fields, models,_ +from odoo.exceptions import ValidationError +import requests +import json + +class ResConfig(models.TransientModel): + _inherit = "res.config.settings" + + dn_api_key = fields.Char(string="Dashboard AI API Key",store=True, + config_parameter='ks_dashboard_ninja.dn_api_key') + enable_chart_zoom = fields.Boolean(string="Enable Zooming for charts", store=True, + config_parameter='ks_dashboard_ninja.enable_chart_zoom') + url = fields.Char(string="URL", store=True, + config_parameter="ks_dashboard_ninja.url") + ks_email_id = fields.Char(string="Email ID",store=True,config_parameter="ks_dashboard_ninja.ks_email_id") + ks_analysis_word_length = fields.Selection([("50","50 words"),("100","100 words"),("150","150 words"),("200","200 words"),],default ="100", string="AI Analysis length", store=True,config_parameter="ks_dashboard_ninja.ks_analysis_word_length") + def Open_wizard(self): + if self.url and self.ks_email_id: + try: + url = self.url + "/api/v1/ks_dn_fetch_api" + json_data = {'email':self.ks_email_id, + 'url':self.env['ir.config_parameter'].sudo().get_param('web.base.url'), + 'db_name':self.env.cr.dbname + } + ks_ai_response = requests.post(url,data=json_data) + except Exception as e: + raise ValidationError(_("Please enter correct URL")) + if ks_ai_response.status_code == 200: + try: + ks_ai_response = json.loads(ks_ai_response.text) + except Exception as e: + ks_ai_response = False + if ks_ai_response == "success": + return { + 'type': 'ir.actions.client', + 'tag': 'display_notification', + 'params': { + 'title': _('Success'), + 'message': 'API key sent on Email ID', + 'sticky': False, + } + } + elif ks_ai_response == 'key already generated': + raise ValidationError( + _("key already generated.If you need assistance, feel free to contact at sales@ksolves.com")) + else: + raise ValidationError(_("Either you have entered wrong URL path or there is some problem in sending request. If you need assistance, feel free to contact at sales@ksolves.com")) + else: + raise ValidationError(_("Some problem in sending request.Please contact at sales@ksolves.com")) + else: + raise ValidationError(_("Please enter URL and Email ID")) + diff --git a/third_party_addons/ks_dashboard_ninja/requirements.txt b/third_party_addons/ks_dashboard_ninja/requirements.txt new file mode 100644 index 000000000..2a6c78255 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/requirements.txt @@ -0,0 +1,5 @@ +xlrd==2.0.1 +openpyxl == 3.1.2 +gTTS == 2.5.1 +pandas==2.1.2 +SQLAlchemy==2.0.32 diff --git a/third_party_addons/ks_dashboard_ninja/security/ir.model.access.csv b/third_party_addons/ks_dashboard_ninja/security/ir.model.access.csv new file mode 100644 index 000000000..667cf1c0c --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/security/ir.model.access.csv @@ -0,0 +1,36 @@ +id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink +access_ks_dashboard_ninja_board,ks_dashboard_ninja.board,model_ks_dashboard_ninja_board,base.group_user,1,1,1,1 +access_ks_dashboard_ninja_kpi_mail,ks_dashboard_ninja.kpi_mail,model_ks_dashboard_ninja_kpi_mail,base.group_user,1,1,1,1 +access_ks_dashboard_ninja_item,ks_dashboard_ninja.item,model_ks_dashboard_ninja_item,base.group_user,1,1,1,1 +access_ks_to_do_headers,ks_to.do.headers,model_ks_to_do_headers,base.group_user,1,1,1,1 +access_ks_to_do_description,ks_to.do.description,model_ks_to_do_description,base.group_user,1,1,1,1 +access_ks_dashboard_ninja_child_board,ks_dashboard_ninja.child_board,model_ks_dashboard_ninja_child_board,base.group_user,1,1,1,1 +access_ks_dashboard_ninja_board_defined_filters,ks_dashboard_ninja.board_defined_filters,model_ks_dashboard_ninja_board_defined_filters,base.group_user,1,1,1,1 +access_ks_dashboard_ninja_board_custom_filters,ks_dashboard_ninja.board_custom_filters,model_ks_dashboard_ninja_board_custom_filters,base.group_user,1,1,1,1 + + +access_ks_dashboard_ninja_board_template,ks_dashboard_ninja.board_template,model_ks_dashboard_ninja_board_template,base.group_user,1,1,1,1 +access_ks_dashboard_ninja_item_goal,ks_dashboard_ninja_item_goal,model_ks_dashboard_ninja_item_goal,base.group_user,1,1,1,1 +access_ks_dashboard_ninja_item_action,ks_dashboard_ninja_item_action,model_ks_dashboard_ninja_item_action,base.group_user,1,1,1,1 +access_ks_dashboard_item_multiplier,ks_dashboard_item.multiplier,model_ks_dashboard_item_multiplier,base.group_user,1,1,1,1 +access_ks_ninja_dashboard_item_action,ks_ninja_dashboard.item_action,model_ks_ninja_dashboard_item_action,base.group_user,1,1,1,0 +access_ks_dashboard_group_by,ks.dashboard.group.by,model_ks_dashboard_group_by,base.group_user,1,1,1,1 +access_ks_dashboard_csv_group_by,ks.dashboard.csv.group.by,model_ks_dashboard_csv_group_by,base.group_user,1,1,1,1 +access_ks_dashboard_new,ks.dashboard.new,model_ks_dashboard_new,base.group_user,1,1,1,1 +access_ks_dashboard_csv_new,ks.dashboard.csv.new,model_ks_dashboard_csv_new,base.group_user,1,1,1,1 +access_ks_dashboard_ninja_import,ks_dashboard_ninja.import,model_ks_dashboard_ninja_import,base.group_system,1,1,1,0 +access_ir_actions_act_window_view,ir.actions.act_window.view,base.model_ir_actions_act_window_view,base.group_user,1,0,0,0 +access_ir_actions_act_window,ir.actions.act_window,base.model_ir_actions_act_window,base.group_user,1,0,0,0 +access_ir_actions_client,ir.actions.client,base.model_ir_actions_client,base.group_user,1,0,0,0 +access_ir_ui_menu,ir.ui.menu,base.model_ir_ui_menu,base.group_user,1,1,0,0 + +access_ir_model_group_user,ir.model,base.model_ir_model,base.group_user,1,0,0,0 +access_ir_model_fields_group_user,ir.model.fields,base.model_ir_model_fields,base.group_user,1,0,0,0 + +access_ir_model_ks_dashboard_wizard,ks_dashboard_wizard,model_ks_dashboard_wizard,base.group_user,1,1,1,1 +access_ir_model_ks_duplicate_dashboard_wizard,ks_duplicate_dashboard__wizard,model_ks_dashboard_duplicate_wizard,base.group_user,1,1,1,1 +access_ir_model_ks_delete_dashboard_wizard,ks_delete_dashboard__wizard,model_ks_dashboard_delete_wizard,base.group_user,1,1,1,1 +access_ks_dashboard_ninja_arti_int,ks_dashboard_ninja.arti_int,model_ks_dashboard_ninja_arti_int,base.group_user,1,1,1,1 +access_ks_dashboard_ninja_ai_dashboard,ks_dashboard_ninja.ai_dashboard,model_ks_dashboard_ninja_ai_dashboard,base.group_user,1,1,1,1 +access_ks_dashboard_ninja_fetch_key,ks_dashboard_ninja.fetch_key,model_ks_dashboard_ninja_fetch_key,base.group_user,1,1,1,1 +access_ks_dashboard_ninja_favourite_filters,ks_dashboard_ninja.favourite_filters,model_ks_dashboard_ninja_favourite_filters,,1,1,1,1 diff --git a/third_party_addons/ks_dashboard_ninja/security/ks_security_groups.xml b/third_party_addons/ks_dashboard_ninja/security/ks_security_groups.xml new file mode 100644 index 000000000..6db28cb63 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/security/ks_security_groups.xml @@ -0,0 +1,59 @@ + + + + + Dashboard Item Company Restriction: User Can only view their company and sub companies + items. + + + + ['|',('ks_company_id','in', company_ids),('ks_company_id','=',False)] + + + + + + + + Dashboard Record Level Groups Access: Show dashboards matching user's assigned groups. + + ['|', ('ks_dashboard_group_access', '=' , False), ('ks_dashboard_group_access','in', user.groups_id.ids)] + + + + + Child Dashboard Record Level Groups Access: Show dashboards matching user's assigned groups. + + ['|', ('ks_computed_group_access', '=', False), ('ks_computed_group_access', 'in', user.groups_id.ids)] + + + + + Dashboard Record Level Groups Access: Show all dashboards to admin regardless of assigned groups. + + [(1, '=', 1)] + + + + + Child Dashboard Record Level Groups Access: Show all dashboards to admin regardless of assigned groups. + + [(1, '=', 1)] + + + + + Dashboard Ninja Rights + + + + Show Full Dashboard Features + + + + + + + + + \ No newline at end of file diff --git a/third_party_addons/ks_dashboard_ninja/static/description/icon.png b/third_party_addons/ks_dashboard_ninja/static/description/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3e9bcc951a3d88dd8fbcd9ea9bff36c516165953 GIT binary patch literal 105472 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�*7wZHGueq|u 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 + + + + diff --git a/third_party_addons/ks_dashboard_ninja/static/images/Area.svg b/third_party_addons/ks_dashboard_ninja/static/images/Area.svg new file mode 100644 index 000000000..0559bb295 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/static/images/Area.svg @@ -0,0 +1,4 @@ + + + + diff --git a/third_party_addons/ks_dashboard_ninja/static/images/Bar.svg b/third_party_addons/ks_dashboard_ninja/static/images/Bar.svg new file mode 100644 index 000000000..e92eb29ce --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/static/images/Bar.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/third_party_addons/ks_dashboard_ninja/static/images/Bullet.svg b/third_party_addons/ks_dashboard_ninja/static/images/Bullet.svg new file mode 100644 index 000000000..cb267b1b4 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/static/images/Bullet.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/third_party_addons/ks_dashboard_ninja/static/images/Chatbot.svg b/third_party_addons/ks_dashboard_ninja/static/images/Chatbot.svg new file mode 100644 index 000000000..602abb039 --- /dev/null +++ b/third_party_addons/ks_dashboard_ninja/static/images/Chatbot.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/third_party_addons/ks_dashboard_ninja/static/images/Comp.gif b/third_party_addons/ks_dashboard_ninja/static/images/Comp.gif new file mode 100644 index 0000000000000000000000000000000000000000..946577b21497d147f9485549847307f56920a8d5 GIT binary patch literal 2709598 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

    6yNzuX+JK>v9w~GHM)?34R0{qq~t$ne}m0 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

    =831#w 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