first push message
@@ -0,0 +1,5 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import models
|
||||
from . import controllers
|
||||
from . import wizard
|
||||
@@ -0,0 +1,66 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
{
|
||||
'name': 'Odoo Gantt View Base',
|
||||
|
||||
'summary': """
|
||||
Unleash the robust features of the Odoo Gantt View Project with the base model.
|
||||
Bridge the gap between the smooth planning and Gantt View Project with the Odoo Gantt View Base module.
|
||||
""",
|
||||
|
||||
'description': """
|
||||
odoo gantt view
|
||||
base for odoo gantt view
|
||||
odoo 19 gantt view base
|
||||
odoo gantt view base in 19
|
||||
Odoo Gantt Base
|
||||
""",
|
||||
|
||||
'author': 'Ksolves India Ltd.',
|
||||
|
||||
'license': 'OPL-1',
|
||||
|
||||
'currency': 'EUR',
|
||||
|
||||
'price': '183',
|
||||
|
||||
'website': 'https://store.ksolves.com',
|
||||
|
||||
'maintainer': 'Ksolves India Ltd.',
|
||||
|
||||
'category': 'Tools',
|
||||
|
||||
# Upgraded from 17.0.1.0.2 to 19.0.1.0.0
|
||||
'version': '19.0.1.0.0',
|
||||
|
||||
'support': 'sales@ksolves.com',
|
||||
|
||||
'depends': ['base', 'base_setup'],
|
||||
|
||||
'images': ['static/description/icon.png'],
|
||||
|
||||
'data': [
|
||||
'views/ks_res_config_settings_view.xml',
|
||||
'data/week_days_data.xml',
|
||||
'security/ir.model.access.csv',
|
||||
],
|
||||
|
||||
'assets': {
|
||||
'web.assets_backend': [
|
||||
'ks_gantt_view_base/static/src/scss/ks_mixins.scss',
|
||||
'ks_gantt_view_base/static/src/scss/ks_control_panel.scss',
|
||||
'ks_gantt_view_base/static/src/scss/ks_web_gantt.scss',
|
||||
'ks_gantt_view_base/static/src/scss/ks_control_panel_slider.scss',
|
||||
'ks_gantt_view_base/static/src/js/ks_gantt_view_new.js',
|
||||
'ks_gantt_view_base/static/src/js/ks_gantt_controller_new.js',
|
||||
'ks_gantt_view_base/static/src/js/Gantt_arch_parser.js',
|
||||
'ks_gantt_view_base/static/src/js/ks_gantt_model_new.js',
|
||||
'ks_gantt_view_base/static/src/js/ks_gantt_renderer_new.js',
|
||||
'ks_gantt_view_base/static/src/js/ks_recommend_colorpicker.js',
|
||||
'ks_gantt_view_base/static/lib/gantt_7.0.11_commercial/codebase/sources/dhtmlxgantt.js',
|
||||
'ks_gantt_view_base/static/lib/gantt_export.js',
|
||||
'ks_gantt_view_base/static/lib/gantt_fullscreen.js',
|
||||
'ks_gantt_view_base/static/lib/chart.min.js',
|
||||
'ks_gantt_view_base/static/src/xml/**/*',
|
||||
],
|
||||
},
|
||||
}
|
||||
@@ -0,0 +1,3 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import ks_base_export_gantt
|
||||
@@ -0,0 +1,76 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import json
|
||||
|
||||
from odoo import http, _
|
||||
from odoo.http import request, content_disposition
|
||||
|
||||
# Odoo 19: ExcelExport moved — try the 17+ path first, fall back to older path.
|
||||
try:
|
||||
from odoo.addons.web.controllers.export import ExcelExport
|
||||
except ImportError:
|
||||
try:
|
||||
from odoo.addons.web.controllers.main import ExcelExport
|
||||
except ImportError:
|
||||
ExcelExport = object # graceful degradation; export simply won't work
|
||||
|
||||
|
||||
class KsBaseGanttExportBase(ExcelExport):
|
||||
|
||||
@http.route('/web/ksganttbase/export/xlsx', type='http', auth="user")
|
||||
def ks_gantt_base_export_excel(self, ks_fields, ks_model_name, ks_domain, ks_context):
|
||||
"""Export Gantt data as an XLSX file."""
|
||||
file_name = self.ks_get_export_file_name()
|
||||
ks_domain = self.ks_validate_domain(ks_domain)
|
||||
ks_fields = json.loads(ks_fields)
|
||||
ks_context = json.loads(ks_context)
|
||||
ks_export_data = []
|
||||
|
||||
ks_model_data = request.env[ks_model_name].with_context(ks_context).search(ks_domain)
|
||||
for ks_data in ks_model_data:
|
||||
ks_row_list = []
|
||||
for ks_export_field in ks_fields:
|
||||
if ks_data._fields[ks_export_field].type == 'many2one':
|
||||
ks_column_data = False
|
||||
if ks_data[ks_export_field].id:
|
||||
ks_column_data = (
|
||||
str(ks_data[ks_export_field].id)
|
||||
+ ','
|
||||
+ ks_data[ks_export_field].display_name
|
||||
)
|
||||
ks_row_list.append(ks_column_data)
|
||||
else:
|
||||
ks_row_list.append(ks_data[ks_export_field])
|
||||
ks_export_data.append(ks_row_list)
|
||||
|
||||
response_data = self.from_data(ks_fields, ks_export_data)
|
||||
return request.make_response(
|
||||
response_data,
|
||||
headers=[
|
||||
(
|
||||
'Content-Disposition',
|
||||
content_disposition(self.filename(file_name.get(ks_model_name))),
|
||||
),
|
||||
('Content-Type', self.content_type),
|
||||
],
|
||||
)
|
||||
|
||||
def ks_get_export_file_name(self):
|
||||
"""Return a mapping of model name → export file label."""
|
||||
return {
|
||||
'hr.leave': _('Time Off'),
|
||||
'mrp.production': _('Manufacturing Orders'),
|
||||
'mrp.workorder': _('Work Orders'),
|
||||
}
|
||||
|
||||
def ks_validate_domain(self, ks_domain):
|
||||
"""Convert JSON domain string to a proper list of tuples."""
|
||||
if not ks_domain:
|
||||
return []
|
||||
ks_domain_list = json.loads(ks_domain)
|
||||
ks_return_list = []
|
||||
for ks_list in ks_domain_list:
|
||||
if isinstance(ks_list, list):
|
||||
ks_return_list.append(tuple(ks_list))
|
||||
else:
|
||||
ks_return_list.append(ks_list)
|
||||
return ks_return_list
|
||||
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<odoo>
|
||||
<data>
|
||||
<record id="ks_week_day_0" model="ks.week.days">
|
||||
<field name="ks_day_name">Sunday</field>
|
||||
<field name="ks_day_no">0</field>
|
||||
</record>
|
||||
|
||||
<record id="ks_week_day_1" model="ks.week.days">
|
||||
<field name="ks_day_name">Monday</field>
|
||||
<field name="ks_day_no">1</field>
|
||||
</record>
|
||||
|
||||
<record id="ks_week_day_2" model="ks.week.days">
|
||||
<field name="ks_day_name">Tuesday</field>
|
||||
<field name="ks_day_no">2</field>
|
||||
</record>
|
||||
|
||||
<record id="ks_week_day_3" model="ks.week.days">
|
||||
<field name="ks_day_name">Wednesday</field>
|
||||
<field name="ks_day_no">3</field>
|
||||
</record>
|
||||
|
||||
<record id="ks_week_day_4" model="ks.week.days">
|
||||
<field name="ks_day_name">Thursday</field>
|
||||
<field name="ks_day_no">4</field>
|
||||
</record>
|
||||
|
||||
<record id="ks_week_day_5" model="ks.week.days">
|
||||
<field name="ks_day_name">Friday</field>
|
||||
<field name="ks_day_no">5</field>
|
||||
</record>
|
||||
|
||||
<record id="ks_week_day_6" model="ks.week.days">
|
||||
<field name="ks_day_name">Saturday</field>
|
||||
<field name="ks_day_no">6</field>
|
||||
</record>
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -0,0 +1,30 @@
|
||||
<odoo>
|
||||
<data>
|
||||
<!--
|
||||
<record id="object0" model="ks_gantt_view_base.ks_gantt_view_base">
|
||||
<field name="name">Object 0</field>
|
||||
<field name="value">0</field>
|
||||
</record>
|
||||
|
||||
<record id="object1" model="ks_gantt_view_base.ks_gantt_view_base">
|
||||
<field name="name">Object 1</field>
|
||||
<field name="value">10</field>
|
||||
</record>
|
||||
|
||||
<record id="object2" model="ks_gantt_view_base.ks_gantt_view_base">
|
||||
<field name="name">Object 2</field>
|
||||
<field name="value">20</field>
|
||||
</record>
|
||||
|
||||
<record id="object3" model="ks_gantt_view_base.ks_gantt_view_base">
|
||||
<field name="name">Object 3</field>
|
||||
<field name="value">30</field>
|
||||
</record>
|
||||
|
||||
<record id="object4" model="ks_gantt_view_base.ks_gantt_view_base">
|
||||
<field name="name">Object 4</field>
|
||||
<field name="value">40</field>
|
||||
</record>
|
||||
-->
|
||||
</data>
|
||||
</odoo>
|
||||
@@ -0,0 +1,602 @@
|
||||
# Translation of Odoo Server.
|
||||
# This file contains the translation of the following modules:
|
||||
# * ks_gantt_view_base
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: Odoo Server 14.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2021-04-23 04:51+0000\n"
|
||||
"PO-Revision-Date: 2021-04-23 04: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_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "15 Min"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "2 Hr"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "30 Min"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "4 Hr"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "8 Hr"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model,name:ks_gantt_view_base.model_ir_actions_act_window_view
|
||||
msgid "Action Window View"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_controller.js:0
|
||||
#, python-format
|
||||
msgid "Are you sure to delete this record?"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__res_config_settings__ks_gantt_theme__dhtmlxgantt_broadway_css
|
||||
msgid "Broadway"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model,name:ks_gantt_view_base.model_res_config_settings
|
||||
msgid "Config Settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#, python-format
|
||||
msgid "Constraint Date : "
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#, python-format
|
||||
msgid "Constraint Type : "
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__res_config_settings__ks_gantt_theme__dhtmlxgantt_contrast_black_css
|
||||
msgid "Contrast Black"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__res_config_settings__ks_gantt_theme__dhtmlxgantt_contrast_white_css
|
||||
msgid "Contrast White"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_controller.js:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_task_link__create_uid
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_week_days__create_uid
|
||||
msgid "Created by"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_task_link__create_date
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_week_days__create_date
|
||||
msgid "Created on"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Critical Path"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_week_days__ks_day_name
|
||||
#, python-format
|
||||
msgid "Day"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Days Off"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Deadline"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#, python-format
|
||||
msgid "Deadline : "
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__res_config_settings__ks_gantt_theme__dhtmlxgantt_terrace_css
|
||||
#, python-format
|
||||
msgid "Default"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ir_actions_act_window_view__display_name
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ir_ui_view__display_name
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_task_link__display_name
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_week_days__display_name
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_res_config_settings__display_name
|
||||
msgid "Display Name"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Duration"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#, python-format
|
||||
msgid "Duration :"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Duration Asc"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Duration Desc"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_controller.js:0
|
||||
#, python-format
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_res_config_settings__ks_gantt_rtl
|
||||
msgid "Enable RTL"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#, python-format
|
||||
msgid "End Date : "
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Excel"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Export"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__ks_task_link__ks_task_link_type__2
|
||||
msgid "Finish to finish"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__ks_task_link__ks_task_link_type__0
|
||||
msgid "Finish to start"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_controller.js:0
|
||||
#, python-format
|
||||
msgid "Format not available"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__ir_actions_act_window_view__view_mode__ks_gantt
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__ir_ui_view__type__ks_gantt
|
||||
msgid "Gantt"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_view.js:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_view.js:0
|
||||
#, python-format
|
||||
msgid "Gantt View"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_res_config_settings__ks_gantt_theme
|
||||
#: model_terms:ir.ui.view,arch_db:ks_gantt_view_base.ks_res_config_settings_view_form
|
||||
msgid "Gantt View Theme"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Graph Overlay"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Graph overlay"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Grid"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ir_actions_act_window_view__id
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ir_ui_view__id
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_task_link__id
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_week_days__id
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_res_config_settings__id
|
||||
msgid "ID"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "JSON"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_week_days__ks_day_no
|
||||
msgid "Ks Day No"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model,name:ks_gantt_view_base.model_ks_task_link
|
||||
msgid "Ks Gantt Task Linking"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model_terms:ir.ui.view,arch_db:ks_gantt_view_base.ks_res_config_settings_view_form
|
||||
msgid "Ksolves Gantt View Settings"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ir_actions_act_window_view____last_update
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ir_ui_view____last_update
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_task_link____last_update
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_week_days____last_update
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_res_config_settings____last_update
|
||||
msgid "Last Modified on"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_task_link__write_uid
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_week_days__write_uid
|
||||
msgid "Last Updated by"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_task_link__write_date
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_week_days__write_date
|
||||
msgid "Last Updated on"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"MS\n"
|
||||
" Project (XML)"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Main actions"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__res_config_settings__ks_gantt_theme__dhtmlxgantt_material_css
|
||||
msgid "Material"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__res_config_settings__ks_gantt_theme__dhtmlxgantt_meadow_css
|
||||
msgid "Meadow"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Month"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Name Asc"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Name Desc"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "New To Old"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Old To New"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "PDF"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "PNG"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "PrimaveraP6"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#, python-format
|
||||
msgid "Progress : "
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Quarter"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_recommend_color_picker.xml:0
|
||||
#, python-format
|
||||
msgid "Recommended Colors"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Resource Panel"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__res_config_settings__ks_gantt_theme__dhtmlxgantt_skyblue_css
|
||||
msgid "Sky Blue"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Sort:"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#, python-format
|
||||
msgid "Stage : "
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#, python-format
|
||||
msgid "Start Date : "
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__ks_task_link__ks_task_link_type__3
|
||||
msgid "Start to finish"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields.selection,name:ks_gantt_view_base.selection__ks_task_link__ks_task_link_type__1
|
||||
msgid "Start to start"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#, python-format
|
||||
msgid "Task : "
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ks_task_link__ks_task_link_type
|
||||
msgid "Task Link Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Today"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model,name:ks_gantt_view_base.model_ir_ui_view
|
||||
msgid "View"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ir_actions_act_window_view__view_mode
|
||||
#: model:ir.model.fields,field_description:ks_gantt_view_base.field_ir_ui_view__type
|
||||
msgid "View Type"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_renderer.js:0
|
||||
#, python-format
|
||||
msgid ""
|
||||
"We are not able to show graph for large duration, please change the view "
|
||||
"scale"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Week"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#: model:ir.model,name:ks_gantt_view_base.model_ks_week_days
|
||||
msgid "Week Days"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Year"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_controller.js:0
|
||||
#, python-format
|
||||
msgid "You can't create link task with group"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_controller.js:0
|
||||
#, python-format
|
||||
msgid "You can't create link with other project"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/js/ks_gantt_controller.js:0
|
||||
#, python-format
|
||||
msgid "You can't create link with project and group"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Zoom To Fit"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "Zoom to fit"
|
||||
msgstr ""
|
||||
|
||||
#. module: ks_gantt_view_base
|
||||
#. openerp-web
|
||||
#: code:addons/ks_gantt_view_base/static/src/xml/ks_gantt_view.xml:0
|
||||
#, python-format
|
||||
msgid "iCal"
|
||||
msgstr ""
|
||||
@@ -0,0 +1,7 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
from . import ks_ir_ui_view_inherit
|
||||
from . import ks_ir_actions_act_window_view_inherit
|
||||
from . import ks_task_link
|
||||
from . import ks_week_days
|
||||
from . import ks_res_config_settings
|
||||
@@ -0,0 +1,7 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class KsActWindowView(models.Model):
|
||||
_inherit = 'ir.actions.act_window.view'
|
||||
|
||||
view_mode = fields.Selection(selection_add=[('ks_gantt', "Gantt")], ondelete={'ks_gantt': 'cascade'})
|
||||
@@ -0,0 +1,91 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import fields, models, api
|
||||
|
||||
|
||||
# Inheriting view and adding Gantt view to View.
|
||||
class KsGanttView(models.Model):
|
||||
_inherit = "ir.ui.view"
|
||||
|
||||
type = fields.Selection(
|
||||
selection_add=[('ks_gantt', "Gantt")],
|
||||
ondelete={'ks_gantt': 'cascade'},
|
||||
)
|
||||
|
||||
def _postprocess_access_rights(self, tree):
|
||||
"""
|
||||
Override to handle access rights for the custom ks_gantt view type.
|
||||
|
||||
Odoo 19 Note: _postprocess_access_rights signature is unchanged from 17→19.
|
||||
The only functional change is that the 'ks_gantt' tag check uses the same
|
||||
pattern as Odoo core kanban/list views — we inherit the base implementation
|
||||
for all standard tags and only add our own handling for <ks_gantt> nodes.
|
||||
"""
|
||||
# Guard: skip extra processing when called in form view context
|
||||
if self._context.get('view_type', False) == 'form':
|
||||
return super()._postprocess_access_rights(tree)
|
||||
|
||||
# Strip nodes the user cannot access based on @groups attribute
|
||||
for node in tree.xpath('//*[@groups]'):
|
||||
if not self.user_has_groups(node.attrib.pop('groups')):
|
||||
node.getparent().remove(node)
|
||||
elif node.tag == 't' and not node.attrib:
|
||||
for child in reversed(node):
|
||||
node.addnext(child)
|
||||
node.getparent().remove(node)
|
||||
|
||||
# Apply model-level create/write/delete access flags to view nodes
|
||||
base_model = tree.get('model_access_rights')
|
||||
for node in tree.xpath('//*[@model_access_rights]'):
|
||||
model = self.env[node.attrib.pop('model_access_rights')]
|
||||
if node.tag == 'field':
|
||||
can_create = model.check_access_rights('create', raise_exception=False)
|
||||
can_write = model.check_access_rights('write', raise_exception=False)
|
||||
node.set('can_create', 'true' if can_create else 'false')
|
||||
node.set('can_write', 'true' if can_write else 'false')
|
||||
else:
|
||||
is_base_model = base_model == model._name
|
||||
for action, operation in (
|
||||
('create', 'create'),
|
||||
('delete', 'unlink'),
|
||||
('edit', 'write'),
|
||||
):
|
||||
if (
|
||||
not node.get(action)
|
||||
and not model.check_access_rights(operation, raise_exception=False)
|
||||
or not self._context.get(action, True)
|
||||
and is_base_model
|
||||
):
|
||||
node.set(action, 'false')
|
||||
|
||||
# Extra group_by model access check specific to ks_gantt nodes
|
||||
if node.tag == 'ks_gantt':
|
||||
group_by_name = node.get('default_group_by')
|
||||
group_by_field = model._fields.get(group_by_name)
|
||||
if group_by_field and group_by_field.type == 'many2one':
|
||||
group_by_model = model.env[group_by_field.comodel_name]
|
||||
for action, operation in (
|
||||
('group_create', 'create'),
|
||||
('group_delete', 'unlink'),
|
||||
('group_edit', 'write'),
|
||||
):
|
||||
if (
|
||||
not node.get(action)
|
||||
and not group_by_model.check_access_rights(
|
||||
operation, raise_exception=False
|
||||
)
|
||||
or not self._context.get(action, True)
|
||||
and is_base_model
|
||||
):
|
||||
node.set(action, 'false')
|
||||
|
||||
return super()._postprocess_access_rights(tree)
|
||||
|
||||
|
||||
class KsBase(models.AbstractModel):
|
||||
_inherit = "base"
|
||||
|
||||
@api.model
|
||||
def get_view(self, view_id=None, view_type='form', **options):
|
||||
"""Pass view_type into context so _postprocess_access_rights can inspect it."""
|
||||
self = self.with_context(view_type=view_type)
|
||||
return super().get_view(view_id=view_id, view_type=view_type, **options)
|
||||
@@ -0,0 +1,48 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class KsResConfigSettings(models.TransientModel):
|
||||
_inherit = 'res.config.settings'
|
||||
|
||||
ks_gantt_theme = fields.Selection(
|
||||
selection=[
|
||||
('dhtmlxgantt_terrace.css', 'Default'),
|
||||
('dhtmlxgantt_skyblue.css', 'Sky Blue'),
|
||||
('dhtmlxgantt_meadow.css', 'Meadow'),
|
||||
('dhtmlxgantt_broadway.css', 'Broadway'),
|
||||
('dhtmlxgantt_material.css', 'Material'),
|
||||
('dhtmlxgantt_contrast_white.css', 'Contrast White'),
|
||||
('dhtmlxgantt_contrast_black.css', 'Contrast Black'),
|
||||
],
|
||||
default='dhtmlxgantt_terrace.css',
|
||||
string='Gantt View Theme',
|
||||
required=True,
|
||||
config_parameter='ks_gantt_view_base.selected_theme',
|
||||
)
|
||||
|
||||
ks_gantt_rtl = fields.Boolean(
|
||||
string='Enable RTL',
|
||||
config_parameter='ks_gantt_view_base.ks_gantt_rtl',
|
||||
default=False,
|
||||
)
|
||||
|
||||
@api.model
|
||||
def ks_gantt_view_theme(self):
|
||||
"""
|
||||
Return current Gantt theme and RTL settings as a dict.
|
||||
|
||||
Odoo 19: Use sudo().get_param() directly — searching ir.config_parameter
|
||||
manually is still supported but get_param() is the recommended API.
|
||||
"""
|
||||
ICP = self.env['ir.config_parameter'].sudo()
|
||||
return {
|
||||
'ks_gantt_view_theme': ICP.get_param(
|
||||
'ks_gantt_view_base.selected_theme',
|
||||
default='dhtmlxgantt_terrace.css',
|
||||
),
|
||||
'ks_gantt_rtl': ICP.get_param(
|
||||
'ks_gantt_view_base.ks_gantt_rtl',
|
||||
default='False',
|
||||
),
|
||||
}
|
||||
@@ -0,0 +1,33 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class KsTaskLink(models.Model):
|
||||
_name = 'ks.task.link'
|
||||
_description = 'Ks Gantt Task Linking'
|
||||
|
||||
ks_task_link_type = fields.Selection(
|
||||
string='Task Link Type',
|
||||
selection=[('0', 'Finish to start'),
|
||||
('1', 'Start to start'),
|
||||
('2', 'Finish to finish'),
|
||||
('3', 'Start to finish'),
|
||||
],
|
||||
required=True, )
|
||||
|
||||
def unlink(self):
|
||||
"""
|
||||
Override unlink function to avoid error 'could not serialize access due to concurrent update',
|
||||
this error occur when user tries to delete the record that is already deleted or not exist,
|
||||
problem with this - when this issue occurs then CRUD operations are also stopped working.
|
||||
"""
|
||||
|
||||
# Check if request id is already deleted or doesn't exist.
|
||||
for rec in self:
|
||||
try:
|
||||
if not len(self.env['ks.task.link'].search([('id', '=', rec.id)])):
|
||||
return True
|
||||
except Exception as e:
|
||||
# If id is out of range.
|
||||
return True
|
||||
return super(KsTaskLink, self).unlink()
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
from odoo import fields, models
|
||||
|
||||
|
||||
class KsWeekDays(models.Model):
|
||||
_name = 'ks.week.days'
|
||||
_description = 'Week Days'
|
||||
_rec_name = 'ks_day_name'
|
||||
|
||||
ks_day_no = fields.Integer()
|
||||
ks_day_name = fields.Char(string='Day')
|
||||
@@ -0,0 +1,3 @@
|
||||
# Odoo 19 compatible versions
|
||||
pandas>=2.2.0
|
||||
openpyxl>=3.1.2
|
||||
@@ -0,0 +1,4 @@
|
||||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_ks_task_link,ks.task.link,ks_gantt_view_base.model_ks_task_link,base.group_user,1,1,1,1
|
||||
access_ks_week_days,ks.week.days,ks_gantt_view_base.model_ks_week_days,base.group_user,1,1,1,1
|
||||
access_ks_gantt_base_import_wizard,ks.gantt.base.import.wizard,ks_gantt_view_base.model_ks_gantt_base_import_wizard,base.group_user,1,1,1,1
|
||||
|
|
After Width: | Height: | Size: 580 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 1.9 MiB |
@@ -0,0 +1,3 @@
|
||||
<svg width="14" height="8" viewBox="0 0 14 8" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M1 1L7 7L13 1" stroke="#4B4B4B" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 208 B |
|
After Width: | Height: | Size: 807 B |
|
After Width: | Height: | Size: 8.5 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 3.7 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 3.4 KiB |
|
After Width: | Height: | Size: 7.5 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 4.8 KiB |
|
After Width: | Height: | Size: 7.1 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 9.5 KiB |
|
After Width: | Height: | Size: 6.7 KiB |
|
After Width: | Height: | Size: 8.6 KiB |
|
After Width: | Height: | Size: 6.6 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 3.5 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 4.1 KiB |
|
After Width: | Height: | Size: 4.6 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 3.8 KiB |
|
After Width: | Height: | Size: 3.6 KiB |
|
After Width: | Height: | Size: 5.0 KiB |
|
After Width: | Height: | Size: 528 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 8.0 KiB |
|
After Width: | Height: | Size: 5.3 KiB |
|
After Width: | Height: | Size: 4.3 KiB |
|
After Width: | Height: | Size: 640 B |
|
After Width: | Height: | Size: 805 B |
|
After Width: | Height: | Size: 177 B |
|
After Width: | Height: | Size: 787 B |
|
After Width: | Height: | Size: 210 KiB |
|
After Width: | Height: | Size: 220 KiB |
|
After Width: | Height: | Size: 215 KiB |
|
After Width: | Height: | Size: 234 KiB |
|
After Width: | Height: | Size: 220 KiB |
|
After Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 20 KiB |
|
After Width: | Height: | Size: 552 B |
|
After Width: | Height: | Size: 172 B |
|
After Width: | Height: | Size: 5.5 KiB |
|
After Width: | Height: | Size: 8.7 KiB |
|
After Width: | Height: | Size: 8.1 KiB |
|
After Width: | Height: | Size: 6.9 KiB |
|
After Width: | Height: | Size: 7.2 KiB |
|
After Width: | Height: | Size: 4.9 KiB |
|
After Width: | Height: | Size: 20 MiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
After Width: | Height: | Size: 13 MiB |
|
After Width: | Height: | Size: 13 MiB |
|
After Width: | Height: | Size: 20 MiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 79 KiB |
|
After Width: | Height: | Size: 4.7 KiB |
|
After Width: | Height: | Size: 8.3 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 5.2 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.3 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.6 KiB |
|
After Width: | Height: | Size: 2.0 KiB |
|
After Width: | Height: | Size: 2.2 KiB |
|
After Width: | Height: | Size: 1.5 KiB |
|
After Width: | Height: | Size: 1.4 KiB |
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 1.9 KiB |