Merge remote-tracking branch 'origin/dev_odex-event'

This commit is contained in:
maltayyar2 2026-01-14 18:29:07 +03:00
commit 3bbe31eb34
476 changed files with 46194 additions and 0 deletions

1
odex-event/README.md Normal file
View File

@ -0,0 +1 @@
# takaful-project

View File

@ -0,0 +1 @@
# Final comprehensive test - Thu Dec 4 11:23:01 +03 2025

View File

@ -0,0 +1 @@
# Final definitive test Thu Dec 4 11:02:45 +03 2025

View File

@ -0,0 +1 @@
# Test file created at Thu Dec 4 10:59:27 +03 2025

View File

@ -0,0 +1 @@
# ULTIMATE FINAL TEST Thu Dec 4 11:06:45 +03 2025

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import models

View File

@ -0,0 +1,26 @@
# -*- coding: utf-8 -*-
{
'name': 'Events Custom',
'version': '1.1.0',
'website': 'https://www.odoo.com/page/events',
'category': 'Odex25-Event/Odex25-Event',
'summary': 'Add Extra Features to Event module',
'description': """
Events Custom.
==============
Key Features
------------
* Edit in Email Schedule Add appility to send emails to Attendees after change in tracks
* ...
""",
'depends': ['website_event_track','dms','project'],
'data': [
'data/email_template_data.xml',
'views/dms_file_view.xml',
'views/event_views.xml',
'report/event_cards.xml',
],
'installable': True,
'auto_install': False,
}

View File

@ -0,0 +1,56 @@
<?xml version="1.0"?>
<odoo>
<data noupdate="1">
<record id="event_subscription" model="mail.template">
<field name="name">Event: Change in Tracks</field>
<field name="model_id" ref="event.model_event_registration"/>
<field name="email_from">${(object.event_id.organizer_id.email or object.event_id.user_id.email or '')|safe}</field>
<field name="email_to" >${object.partner_id.email or object.email|safe}</field>
<field name="lang">${object.partner_id.lang}</field>
<field name="reply_to" eval="False"/>
<field name="subject">Some event Tracks has been changed : ${object.event_id.name}</field>
<field name="body_html"><![CDATA[
<div style="background:#F3F5F6;color:#515166;padding:25px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;">
% set date_begin = format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%SZ')
% set date_end = format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%SZ')
<table style="width:600px;margin:5px auto;">
<tbody>
<tr>
<td>
<a href="/">
<img src="/logo" alt="${object.company_id.name}" style="vertical-align:baseline;max-width:100px;" />
</a>
</td>
<td>
<p>Details of the event Track changes</p>
<ul>
% for line in object.event_id.event_mail_ids:
% if line.interval_type == 'after_change_tracks':
% for rec in line.mail_track_ids:
% if not rec.mail_sent:
<li>
Track ${rec.track_id.name} changed From ${rec.change_date_from} To ${rec.change_date_to}
</li>
% endif
% endfor
% endif
% endfor
</ul>
</td>
<td style="text-align:right;vertical-align:middle;">
% if 'website_url' in object.website_url and object.event_id.website_url:
<a href="${object.event_id.website_url}" style="background-color: #1abc9c; padding: 12px; font-weight: 12px; text-decoration: none; color: #fff; border-radius: 5px; font-size:16px;">View Event</a>
% endif
</td>
</tr>
</tbody>
</table>
</div>
]]></field>
</record>
</data>
</odoo>

View File

@ -0,0 +1,495 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * event_custom
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 11.0\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2023-02-10 21:22+0000\n"
"PO-Revision-Date: 2023-02-10 21:22+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: event_custom
#: model:mail.template,body_html:event_custom.event_subscription
msgid "\n"
"<div style=\"background:#F3F5F6;color:#515166;padding:25px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;\">\n"
"% set date_begin = format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%SZ')\n"
"% set date_end = format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%SZ')\n"
" <table style=\"width:600px;margin:5px auto;\">\n"
" <tbody>\n"
" <tr>\n"
" <td>\n"
" <a href=\"/\">\n"
" <img src=\"/logo\" alt=\"${object.company_id.name}\" style=\"vertical-align:baseline;max-width:100px;\" />\n"
" </a>\n"
" </td>\n"
" <td>\n"
"\n"
" <p>Details of the event Track changes</p>\n"
"<ul>\n"
"% for line in object.event_id.event_mail_ids:\n"
"% if line.interval_type == 'after_change_tracks':\n"
"% for rec in line.mail_track_ids:\n"
"% if not rec.mail_sent:\n"
"\n"
"<li>\n"
" Track ${rec.track_id.name} changed From ${rec.change_date_from} To ${rec.change_date_to}\n"
" </li>\n"
"% endif\n"
"% endfor\n"
"% endif\n"
"% endfor\n"
"</ul>\n"
"</td>\n"
"\n"
" <td style=\"text-align:right;vertical-align:middle;\">\n"
" % if 'website_url' in object.website_url and object.event_id.website_url:\n"
" <a href=\"${object.event_id.website_url}\" style=\"background-color: #1abc9c; padding: 12px; font-weight: 12px; text-decoration: none; color: #fff; border-radius: 5px; font-size:16px;\">View Event</a>\n"
" % endif\n"
" </td>\n"
" </tr>\n"
" </tbody>\n"
" </table>\n"
"</div>\n"
" "
msgstr "\n"
"<div style=\"background:#F3F5F6;color:#515166;padding:25px 0px;font-family:Arial,Helvetica,sans-serif;font-size:14px;\">\n"
"% set date_begin = format_tz(object.event_id.date_begin, tz='UTC', format='%Y%m%dT%H%M%SZ')\n"
"% set date_end = format_tz(object.event_id.date_end, tz='UTC', format='%Y%m%dT%H%M%SZ')\n"
" <table style=\"width:600px;margin:5px auto;\">\n"
" <tbody>\n"
" <tr>\n"
" <td>\n"
" <a href=\"/\">\n"
" <img src=\"/logo\" alt=\"${object.company_id.name}\" style=\"vertical-align:baseline;max-width:100px;\" />\n"
" </a>\n"
" </td>\n"
" <td>\n"
"\n"
" <p>Details of the event Track changes</p>\n"
"<ul>\n"
"% for line in object.event_id.event_mail_ids:\n"
"% if line.interval_type == 'after_change_tracks':\n"
"% for rec in line.mail_track_ids:\n"
"% if not rec.mail_sent:\n"
"\n"
"<li>\n"
" Track ${rec.track_id.name} changed From ${rec.change_date_from} To ${rec.change_date_to}\n"
" </li>\n"
"% endif\n"
"% endfor\n"
"% endif\n"
"% endfor\n"
"</ul>\n"
"</td>\n"
"\n"
" <td style=\"text-align:right;vertical-align:middle;\">\n"
" % if 'website_url' in object.website_url and object.event_id.website_url:\n"
" <a href=\"${object.event_id.website_url}\" style=\"background-color: #1abc9c; padding: 12px; font-weight: 12px; text-decoration: none; color: #fff; border-radius: 5px; font-size:16px;\">View Event</a>\n"
" % endif\n"
" </td>\n"
" </tr>\n"
" </tbody>\n"
" </table>\n"
"</div>\n"
" "
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_event_benefit_club_id
msgid "Benefit Club"
msgstr "نادي المستفيدين"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.view_event_search
msgid "Cancelled"
msgstr "ملغى "
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_sponsor_event_type_id
msgid "Category"
msgstr "النوع"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.print_event_card1
#: model:ir.ui.view,arch_db:event_custom.print_event_card2
#: model:ir.ui.view,arch_db:event_custom.print_event_card3
#: model:ir.ui.view,arch_db:event_custom.print_event_card4
msgid "Company Logo"
msgstr "شعار الشركة"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_sponsor_type_sponsor_cost
msgid "Cost"
msgstr "التكلفة"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_create_uid
msgid "Created by"
msgstr "أنشئ بواسطة"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_create_date
msgid "Created on"
msgstr "أنشئ في"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_display_name
msgid "Display Name"
msgstr "الاسم المعروض"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.view_event_search
msgid "Done"
msgstr "منتهي"
#. module: event_custom
#: model:ir.model,name:event_custom.model_event_event
#: model:ir.model.fields,field_description:event_custom.field_muk_dms_file_event_id
msgid "Event"
msgstr "الحدث"
#. module: event_custom
#: model:ir.model,name:event_custom.model_event_mail
msgid "Event Automated Mailing"
msgstr "إرسال رسائل الفعاليات تلقائيًا"
#. module: event_custom
#: code:addons/event_custom/models/event.py:79
#, python-format
msgid "Event Files"
msgstr "Event Files"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_event_image
#: model:ir.ui.view,arch_db:event_custom.print_event_card1
#: model:ir.ui.view,arch_db:event_custom.print_event_card2
#: model:ir.ui.view,arch_db:event_custom.print_event_card3
#: model:ir.ui.view,arch_db:event_custom.print_event_card4
msgid "Event Image"
msgstr "Event Image"
#. module: event_custom
#: code:addons/event_custom/models/event.py:98
#, python-format
msgid "Event Mails"
msgstr "Event Mails"
#. module: event_custom
#: model:ir.model,name:event_custom.model_event_sponsor
msgid "Event Sponsor"
msgstr "Event Sponsor"
#. module: event_custom
#: model:ir.model,name:event_custom.model_event_sponsor_type
msgid "Event Sponsor Type"
msgstr "Event Sponsor Type"
#. module: event_custom
#: model:ir.model,name:event_custom.model_event_track
msgid "Event Track"
msgstr "Event Track"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_sponsor_date
msgid "Event date"
msgstr "Event date"
#. module: event_custom
#: model:ir.ui.menu,name:event_custom.menu_event_sponsor
msgid "Events Sponsor"
msgstr "Events Sponsor"
#. module: event_custom
#: model:ir.ui.menu,name:event_custom.menu_event_track
msgid "Events Tracks"
msgstr "فقرات الفعالية"
#. module: event_custom
#: model:ir.actions.act_window,name:event_custom.action_event_sponsor_view
msgid "Events sponsor"
msgstr "Events sponsor"
#. module: event_custom
#: model:ir.actions.act_window,name:event_custom.action_event_track_view
msgid "Events track"
msgstr "Events track"
#. module: event_custom
#: model:ir.model,name:event_custom.model_muk_dms_file
msgid "File"
msgstr "الملف"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_event_count_files
#: model:ir.model.fields,field_description:event_custom.field_event_event_event_dms_file_ids
#: model:ir.ui.view,arch_db:event_custom.view_event_form
msgid "Files"
msgstr "الملفات"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_id
msgid "ID"
msgstr "المعرف"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_track___last_update
msgid "Last Modified on"
msgstr "آخر تعديل في"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.view_event_search
#: model:ir.ui.view,arch_db:event_custom.view_event_sponsor_search
#: model:ir.ui.view,arch_db:event_custom.view_event_track_search
msgid "Last Month"
msgstr "آخر شهر"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_write_uid
msgid "Last Updated by"
msgstr "آخر تحديث بواسطة"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_write_date
msgid "Last Updated on"
msgstr "آخر تحديث في"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.view_event_search
#: model:ir.ui.view,arch_db:event_custom.view_event_sponsor_search
#: model:ir.ui.view,arch_db:event_custom.view_event_track_search
msgid "Last Year"
msgstr "السنة السابقة"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_track_location_location_url
msgid "Location URL"
msgstr "موقع الحدث"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_scheduler_id
msgid "Mail Scheduler"
msgstr "مجدول رسائل البريد"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_mail_sent
msgid "Mail Sent"
msgstr "تم إرسال الرسالة"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_mail_track_ids
msgid "Mail Track"
msgstr "Mail Track"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_event_count_mails
#: model:ir.ui.view,arch_db:event_custom.view_event_form
msgid "Mails"
msgstr "Mails"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_event_directory_id
msgid "Main directory"
msgstr "ملفات المسابقة"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_change_date_to
msgid "New Time"
msgstr "New Time"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_change_date_from
msgid "Old Time"
msgstr "Old Time"
#. module: event_custom
#: model:ir.actions.report,name:event_custom.hr_event_print_card2
msgid "Print female Organizer card"
msgstr "Print female Organizer card"
#. module: event_custom
#: model:ir.actions.report,name:event_custom.hr_event_print_card4
msgid "Print female volunteer card"
msgstr "Print female volunteer card"
#. module: event_custom
#: model:ir.actions.report,name:event_custom.hr_event_print_card1
msgid "Print male Organizer card"
msgstr "Print male Organizer card"
#. module: event_custom
#: model:ir.actions.report,name:event_custom.hr_event_print_card3
msgid "Print male volunteer card"
msgstr "Print male volunteer card"
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_event_project_id
msgid "Project"
msgstr "المشروع"
#. module: event_custom
#: model:mail.template,subject:event_custom.event_subscription
msgid "Some event Tracks has been changed : ${object.event_id.name}"
msgstr "Some event Tracks has been changed : ${object.event_id.name}"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.event_sponsor_view_pivot
msgid "Sponsor"
msgstr "كفيل"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.view_event_search
#: model:ir.ui.view,arch_db:event_custom.view_event_sponsor_search
#: model:ir.ui.view,arch_db:event_custom.view_event_track_search
msgid "This Month"
msgstr "هذا الشهر"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.view_event_search
#: model:ir.ui.view,arch_db:event_custom.view_event_sponsor_search
#: model:ir.ui.view,arch_db:event_custom.view_event_track_search
msgid "This Year"
msgstr "هذه السنة"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.event_track_view_pivot
msgid "Track"
msgstr "مسار"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.view_event_mail_form
msgid "Track Changes Mails"
msgstr "Track Changes Mails"
#. module: event_custom
#: model:ir.model,name:event_custom.model_event_track_location
msgid "Track Location"
msgstr "موقع المسار "
#. module: event_custom
#: model:ir.model.fields,field_description:event_custom.field_event_mail_track_track_id
msgid "Tracks"
msgstr "فقرات الفعالية"
#. module: event_custom
#: model:ir.model,name:event_custom.model_event_mail_track
msgid "Tracks change Mail Scheduler"
msgstr "Tracks change Mail Scheduler"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.print_event_card1
#: model:ir.ui.view,arch_db:event_custom.print_event_card2
#: model:ir.ui.view,arch_db:event_custom.print_event_card3
#: model:ir.ui.view,arch_db:event_custom.print_event_card4
msgid "sponsor Image"
msgstr "sponsor Image"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.print_event_card3
msgid "متطوع"
msgstr "متطوع"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.print_event_card4
msgid "متطوعة"
msgstr "متطوعة"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.print_event_card1
msgid "منظم"
msgstr "منظم"
#. module: event_custom
#: model:ir.ui.view,arch_db:event_custom.print_event_card2
msgid "منظمة"
msgstr "منظمة"
#. module: event
#: model:event.type,name:event.event_type_data_online
#: model:ir.ui.view,arch_db:event.view_event_form
msgid "Online"
msgstr "عن بُعد"
#. module: website_event
#: model:ir.model.fields,field_description:website_event.field_event_event_website_menu
msgid "Dedicated Menu"
msgstr "حضوري"
#. module: website_event_track
#: model:ir.model.fields,field_description:website_event_track.field_event_track_partner_id
msgid "Speaker"
msgstr "المتحدث"
#. module: website_event_track
#: model:ir.model.fields,field_description:website_event_track.field_event_track_partner_name
msgid "Speaker Name"
msgstr "اسم المتحدث"
#. module: website_event_track
#: model:ir.model.fields,field_description:website_event_track.field_event_track_partner_phone
msgid "Speaker Phone"
msgstr "هاتف المتحدث"
#. module: website_event_track
#: code:addons/website_event_track/models/event_track.py:159
#: model:ir.model.fields,field_description:website_event_track.field_event_track_partner_email
#, python-format
msgid "Speaker Email"
msgstr "البريد الالكتروني للمتحدث"
#. module: website_event_track
#: model:ir.actions.act_window,name:website_event_track.action_event_sponsor_from_event
#: model:ir.actions.act_window,name:website_event_track.action_event_track
#: model:ir.actions.act_window,name:website_event_track.action_event_track_from_event
#: model:ir.ui.menu,name:website_event_track.menu_event_track
#: model:ir.ui.view,arch_db:website_event_track.view_event_track_calendar
#: model:ir.ui.view,arch_db:website_event_track.view_event_track_search
msgid "Event Tracks"
msgstr "فقرات الفعالية"
#. module: event
#: model:ir.ui.menu,name:event.menu_event_mail_schedulers
msgid "Mail Schedulers"
msgstr "الرسائل المجدولة للفعالية"
#. module: website_event_track
#: model:ir.model.fields,field_description:website_event_track.field_event_event_track_count
#: model:ir.model.fields,field_description:website_event_track.field_event_event_track_ids
#: model:ir.model.fields,field_description:website_event_track.field_event_track_tag_track_ids
#: model:ir.ui.view,arch_db:website_event_track.view_event_track_graph
msgid "Tracks"
msgstr "فقرات الفعالية"
#. module: sale_timesheet
#: model:ir.model.fields,field_description:sale_timesheet.field_project_task_sale_line_id
#: model:ir.ui.view,arch_db:sale_timesheet.view_sale_service_inherit_form2
msgid "Sales Order Item"
msgstr "تكلفة تنفيذ المهمة"
#. module: project
#: model:ir.ui.view,arch_db:project.project_planner
msgid "Tasks analysis"
msgstr "تقرير مالي للفعالية"
#. module: web
#. openerp-web
#: code:addons/web/static/src/xml/base.xml:508 code:addons/web/static/src/xml/base.xml:535
#, python-format
msgid "Measures"
msgstr "عناصر فرز التقرير"
#. module: project
#: model:ir.actions.act_window,name:project.action_project_task_user_tree
#: model:ir.actions.act_window,name:project.action_project_task_user_tree_filtered
#: model:ir.ui.menu,name:project.menu_project_report_task_analysis
#: model:ir.ui.view,arch_db:project.view_task_project_user_graph
#: model:ir.ui.view,arch_db:project.view_task_project_user_pivot
#: model:ir.ui.view,arch_db:project.view_task_project_user_search
msgid "Tasks Analysis"
msgstr "تقرير مالي للفعالية"

View File

@ -0,0 +1,5 @@
# -*- coding: utf-8 -*-
from . import event
from . import event_mail
from . import dms_file

View File

@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
from odoo import models, fields
import unused_module # F401
class CodeQualityPRTest(models.Model):
_name = 'code.quality.test'
name = fields.Char('Name')
# E501
very_long_field = fields.Text('Field', help='This is an extremely long help text that exceeds the 120 character limit that we have configured in our flake8 settings')
# F821
def buggy_method(self):
return undefined + 1

View File

@ -0,0 +1,10 @@
# -*- coding: utf-8 -*-
from odoo import models, api, fields, tools
class File(models.Model):
_inherit = 'dms.file'
event_id = fields.Many2one('event.event', 'Event')

View File

@ -0,0 +1,142 @@
# -*- coding: utf-8 -*-
from odoo import _, api, fields, models
class Track(models.Model):
_inherit = "event.track"
# @api.multi
def write(self, vals):
if 'date' in vals:
onchange_schedulers = self.event_id.event_mail_ids.filtered(lambda s: s.interval_type == 'after_change_tracks')
onchange_schedulers.with_context(track_change={'id':self.id,'change_date_from':self.date,'change_date_to':vals['date']}).execute()
res = super(Track, self).write(vals)
return res
class EventEvent(models.Model):
_inherit = 'event.event'
directory_id = fields.Many2one('muk_dms.directory', 'Main directory')
benefit_club_id = fields.Many2one('benefit.club', 'Benefit Club',domain =[('state', '=', 'approve')])
event_dms_file_ids = fields.One2many('dms.file', 'event_id', string='Files', copy=False)
count_files = fields.Integer(
compute='_compute_count_files',
store=True,
string="Files")
event_mail_ids = fields.One2many('event.mail', 'event_id', string='Mails', copy=False)
count_mails = fields.Integer(
compute='_compute_count_mail',
store=True,
string="Mails")
image = fields.Binary("Event Image", attachment=True)
project_id = fields.Many2one('project.project',string='Project',index=True,tracking=True)
# @api.multi
def write(self, vals):
res = super(EventEvent, self).write(vals)
for benifit in self.benefit_club_id.benefit_ids:
values = {
'email': benifit.email,
'event_id': self.id,
'name': benifit.name,
'phone': benifit.phone}
registration_exist = self.env['event.registration'].search(
[('email', '=', benifit.email), ('event_id', '=', self.id)], limit=1)
if registration_exist:
continue;
else:
self.env['event.registration'].create(values)
return res
# @api.onchange('benefit_club_id')
# def onchange_benefit_club_id(self):
# for record in self:
# for benifit in record.benefit_club_id.benefit_ids:
# values = {
# 'email': benifit.email,
# 'event_id': self._origin.id,
# 'name': benifit.name,
# 'phone': benifit.phone }
# record.env['event.registration'].create(values)
# # record.write({'registration_ids':values})
@api.depends('event_dms_file_ids')
def _compute_count_files(self):
for record in self:
record.count_files = len(record.event_dms_file_ids)
@api.depends('event_mail_ids')
def _compute_count_mail(self):
for record in self:
record.count_mails = len(record.event_mail_ids)
@api.model
def create(self, vals):
res = super(EventEvent, self).create(vals)
if not res.directory_id:
directory = self.env['muk_dms.directory'].sudo().create({
'name': res.name,
'is_root_directory': True,
#TODO review how to get settings
'settings': self.env['muk_dms.settings'].search([],limit=1).id,
})
res.directory_id = directory.id
return res
# @api.multi
def action_open_files(self):
"""
"""
ctx = dict(
default_event_id=self.id,
default_directory=self.directory_id.id,
)
return {
'name': _('Event Files'),
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'dms.file',
'target': 'current',
'context': ctx,
'domain':[("event_id", "=", self.id)]
}
# @api.multi
def action_open_mail(self):
"""
"""
ctx = dict(
default_event_id=self.id,
default_directory=self.directory_id.id,
)
return {
'name': _('Event Mails'),
'type': 'ir.actions.act_window',
'view_type': 'form',
'view_mode': 'tree,form',
'res_model': 'event.mail',
'target': 'current',
'context': ctx,
'domain': [("event_id", "=", self.id)]
}
class Sponsor(models.Model):
_inherit = "event.sponsor"
date = fields.Datetime(string='Event date', related="event_id.date_begin",store=True)
event_type_id = fields.Many2one('event.type', string='Category',related="event_id.event_type_id",store=True)
class SponsorType(models.Model):
_inherit = "event.sponsor.type"
sponsor_cost = fields.Float("Cost")
class TrackLocation(models.Model):
_inherit = "event.track.location"
location_url = fields.Char("Location URL")

View File

@ -0,0 +1,81 @@
# -*- coding: utf-8 -*-
from datetime import datetime
from dateutil.relativedelta import relativedelta
from odoo import api, fields, models, tools
from odoo.tools import exception_to_unicode
from odoo.tools.translate import _
import random
import logging
_logger = logging.getLogger(__name__)
_INTERVALS = {
'hours': lambda interval: relativedelta(hours=interval),
'days': lambda interval: relativedelta(days=interval),
'weeks': lambda interval: relativedelta(days=7*interval),
'months': lambda interval: relativedelta(months=interval),
'now': lambda interval: relativedelta(hours=0),
}
class EventMailScheduler(models.Model):
_inherit = 'event.mail'
interval_type = fields.Selection(selection_add = [('after_change_tracks', 'After Change in Tracks')],ondelete={'after_change_tracks': 'set default'})
mail_track_ids = fields.One2many('event.mail.track', 'scheduler_id')
# @api.one
@api.depends('mail_sent', 'interval_type', 'event_id.registration_ids','mail_track_ids','mail_track_ids.mail_sent', 'mail_registration_ids')
def _compute_done(self):
"""
overwrite to include new interval type After Change in Tracks
"""
if self.interval_type in ['before_event', 'after_event']:
self.done = self.mail_sent
elif self.interval_type in ['after_sub']:
self.done = len(self.mail_registration_ids) == len(self.event_id.registration_ids) and all(mail.mail_sent for mail in self.mail_registration_ids)
else:
self.done = all(mail.mail_sent for mail in self.mail_track_ids)
# @api.one
def execute(self):
"""
inherit to include new interval type After Change in Tracks
"""
result = super(EventMailScheduler, self).execute()
now = fields.Datetime.now()
if self.interval_type == 'after_change_tracks' and self._context.get('track_change',False):
# update Tracks change lines
track_change = self._context.get('track_change',False)
lines = [
(0, 0, {'track_id': track_change['id'],'change_date_from':track_change['change_date_from'],'change_date_to':track_change['change_date_to']})
]
if lines:
self.write({'mail_track_ids': lines})
# execute scheduler on registrations
self.mail_track_ids.execute()
return result
class EventMailRegistration(models.Model):
_name = 'event.mail.track'
_description = 'Tracks change Mail Scheduler'
_rec_name = 'scheduler_id'
_order = 'change_date_to DESC'
scheduler_id = fields.Many2one('event.mail', 'Mail Scheduler', required=True, ondelete='cascade')
track_id = fields.Many2one('event.track', 'Tracks', required=True, ondelete='cascade')
change_date_from = fields.Datetime('Old Time')
change_date_to = fields.Datetime('New Time')
mail_sent = fields.Boolean('Mail Sent')
# @api.one
def execute(self):
if not self.mail_sent:
for registration in self.track_id.event_id.registration_ids:
self.scheduler_id.template_id.send_mail(registration.id)
self.write({'mail_sent': True})

View File

@ -0,0 +1,15 @@
# -*- coding: utf-8 -*-
from odoo import models, fields
import os # F401: unused import
class FinalQualityTest(models.Model):
_name = 'final.quality.test'
name = fields.Char('Name')
# E501: line too long
description = fields.Text('Description', help='This is a very very very long help text that exceeds 120 characters limit set by our flake8 configuration')
# F821: undefined name
def test_method(self):
return some_undefined_variable + 5

View File

@ -0,0 +1,21 @@
# -*- coding: utf-8 -*-
from odoo import models, fields
import sys # F401: unused import
class QualityTest(models.Model):
_name = 'quality.test'
_description = 'Code Quality Test'
name = fields.Char('Name', required=True)
# E501: line too long
description = fields.Text('Description', help='This is an extremely long help text that definitely exceeds the maximum recommended line length of 120 characters for PEP8 compliance')
# F821: undefined variable
def broken_method(self):
return undefined_var + 10
# W293: blank line contains whitespace
# E225: missing whitespace around operator
count=fields.Integer(default=0)

View File

@ -0,0 +1,35 @@
# -*- coding: utf-8 -*-
from odoo import models, fields, api
import sys # Unused import - will trigger F401
class EventErrorTest(models.Model):
_name = 'event.error.test'
_description = 'Test Model with Errors'
name = fields.Char(string='Name', required=True)
# ERROR 1: Syntax error - missing colon after function definition
def broken_method(self)
return "This will cause syntax error"
# ERROR 2: Line too long (PEP8 E501)
description = fields.Text(string='This is an extremely long field description that definitely exceeds the maximum line length of 79 characters recommended by PEP8 style guide')
# ERROR 3: Undefined variable
def process_data(self):
result = undefined_variable_name + 10 # F821: undefined name
return result
# ERROR 4: Unused variable
def calculate(self):
unused_var = 100 # F841: local variable assigned but never used
return 50
# ERROR 5: Multiple statements on one line (E701)
def compact(self): x = 1; y = 2; return x + y
# ERROR 6: Trailing whitespace (W291)
status = fields.Selection([('draft', 'Draft'), ('done', 'Done')])
# ERROR 7: Missing whitespace around operator (E225)
count=fields.Integer(default=0)

View File

@ -0,0 +1,259 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<report
id="hr_event_print_card1"
string="Print male Organizer card"
model="event.event"
report_type="qweb-pdf"
name="event_custom.print_event_card1"
file="event_custom.print_event_card1"
print_report_name="'Print card - %s' % (object.name).replace('/', '')"
/>
<report
id="hr_event_print_card2"
string="Print female Organizer card"
model="event.event"
report_type="qweb-pdf"
name="event_custom.print_event_card2"
file="event_custom.print_event_card2"
print_report_name="'Print card - %s' % (object.name).replace('/', '')"
/>
<report
id="hr_event_print_card3"
string="Print male volunteer card"
model="event.event"
report_type="qweb-pdf"
name="event_custom.print_event_card3"
file="event_custom.print_event_card3"
print_report_name="'Print card - %s' % (object.name).replace('/', '')"
/>
<report
id="hr_event_print_card4"
string="Print female volunteer card"
model="event.event"
report_type="qweb-pdf"
name="event_custom.print_event_card4"
file="event_custom.print_event_card4"
print_report_name="'Print card - %s' % (object.name).replace('/', '')"
/>
<template id="print_event_card1">
<t t-call="web.basic_layout">
<div class="page">
<t t-foreach="docs" t-as="o">
<div class="col-sm-6">
<table style="width:243pt; height:153pt; border: 1pt solid black; border-collapse:separate; border-radius:8pt; margin:5pt">
<tr style="height:30%;" align="center">
<td>
<table>
<td>
<tr>
<td align="center" valign="center">
<img t-if="o.company_id and o.company_id.logo" t-att-src="'data:image/png;base64,%s' % to_text(o.company_id.logo)" style="max-height:45pt;max-width:90%" alt="Company Logo"/>
</td>
<!-- <td align="center" valign="center">
<img t-if="o.company_id and o.company_id.logo" t-att-src="'data:image/png;base64,%s' % to_text(o.company_id.logo)" style="max-height:45pt;max-width:90%" alt="Company Logo"/>
</td> -->
<td align="center" valign="center">
<img t-if="o.image" t-att-src="'data:image/png;base64,%s' % to_text(o.image)" style="max-height:85pt;max-width:90%" alt="Event Image"/>
</td>
</tr>
</td>
</table>
</td>
</tr>
<tr style="height:60%" align="center">
<td valign="center">
<table>
<tr><th><div style="font-size:15pt; margin-bottom:0pt;margin-top:0pt;" valign="center">منظم</div></th></tr>
</table>
</td>
</tr>
<tr style="height:10%" align="center">
<td>
<table>
<tr><td>
<t t-foreach="o.sponsor_ids" t-as="sponsor">
<t t-if="sponsor.partner_id.image">
<!-- <span t-field="sponsor.partner_id.image"/> -->
<img t-att-src="'data:image/png;base64,%s' % to_text(sponsor.partner_id.image)" style="max-height:30pt;max-width:200pt" alt="sponsor Image"/>
</t>
</t>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</t>
</div>
</t>
</template>
<template id="print_event_card2">
<t t-call="web.basic_layout">
<div class="page">
<t t-foreach="docs" t-as="o">
<div class="col-sm-6">
<table style="width:243pt; height:153pt; border: 1pt solid black; border-collapse:separate; border-radius:8pt; margin:5pt">
<tr style="height:30%;" align="center">
<td>
<table>
<td>
<tr>
<td align="center" valign="center">
<img t-if="o.company_id and o.company_id.logo" t-att-src="'data:image/png;base64,%s' % to_text(o.company_id.logo)" style="max-height:45pt;max-width:90%" alt="Company Logo"/>
</td>
<!-- <td align="center" valign="center">
<img t-if="o.company_id and o.company_id.logo" t-att-src="'data:image/png;base64,%s' % to_text(o.company_id.logo)" style="max-height:45pt;max-width:90%" alt="Company Logo"/>
</td> -->
<td align="center" valign="center">
<img t-if="o.image" t-att-src="'data:image/png;base64,%s' % to_text(o.image)" style="max-height:85pt;max-width:90%" alt="Event Image"/>
</td>
</tr>
</td>
</table>
</td>
</tr>
<tr style="height:60%" align="center">
<td valign="center">
<table>
<tr><th><div style="font-size:15pt; margin-bottom:0pt;margin-top:0pt;" valign="center">منظمة</div></th></tr>
</table>
</td>
</tr>
<tr style="height:10%" align="center">
<td>
<table>
<tr><td>
<t t-foreach="o.sponsor_ids" t-as="sponsor">
<t t-if="sponsor.partner_id.image">
<!-- <span t-field="sponsor.partner_id.image"/> -->
<img t-att-src="'data:image/png;base64,%s' % to_text(sponsor.partner_id.image)" style="max-height:30pt;max-width:200pt" alt="sponsor Image"/>
</t>
</t>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</t>
</div>
</t>
</template>
<template id="print_event_card3">
<t t-call="web.basic_layout">
<div class="page">
<t t-foreach="docs" t-as="o">
<div class="col-sm-6">
<table style="width:243pt; height:153pt; border: 1pt solid black; border-collapse:separate; border-radius:8pt; margin:5pt">
<tr style="height:30%;" align="center">
<td>
<table>
<td>
<tr>
<td align="center" valign="center">
<img t-if="o.company_id and o.company_id.logo" t-att-src="'data:image/png;base64,%s' % to_text(o.company_id.logo)" style="max-height:45pt;max-width:90%" alt="Company Logo"/>
</td>
<!-- <td align="center" valign="center">
<img t-if="o.company_id and o.company_id.logo" t-att-src="'data:image/png;base64,%s' % to_text(o.company_id.logo)" style="max-height:45pt;max-width:90%" alt="Company Logo"/>
</td> -->
<td align="center" valign="center">
<img t-if="o.image" t-att-src="'data:image/png;base64,%s' % to_text(o.image)" style="max-height:85pt;max-width:90%" alt="Event Image"/>
</td>
</tr>
</td>
</table>
</td>
</tr>
<tr style="height:60%" align="center">
<td valign="center">
<table>
<tr><th><div style="font-size:15pt; margin-bottom:0pt;margin-top:0pt;" valign="center">متطوع</div></th></tr>
</table>
</td>
</tr>
<tr style="height:10%" align="center">
<td>
<table>
<tr><td>
<t t-foreach="o.sponsor_ids" t-as="sponsor">
<t t-if="sponsor.partner_id.image">
<!-- <span t-field="sponsor.partner_id.image"/> -->
<img t-att-src="'data:image/png;base64,%s' % to_text(sponsor.partner_id.image)" style="max-height:30pt;max-width:200pt" alt="sponsor Image"/>
</t>
</t>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</t>
</div>
</t>
</template>
<template id="print_event_card4">
<t t-call="web.basic_layout">
<div class="page">
<t t-foreach="docs" t-as="o">
<div class="col-sm-6">
<table style="width:243pt; height:153pt; border: 1pt solid black; border-collapse:separate; border-radius:8pt; margin:5pt">
<tr style="height:30%;" align="center">
<td>
<table>
<td>
<tr>
<td align="center" valign="center">
<img t-if="o.company_id and o.company_id.logo" t-att-src="'data:image/png;base64,%s' % to_text(o.company_id.logo)" style="max-height:45pt;max-width:90%" alt="Company Logo"/>
</td>
<!-- <td align="center" valign="center">
<img t-if="o.company_id and o.company_id.logo" t-att-src="'data:image/png;base64,%s' % to_text(o.company_id.logo)" style="max-height:45pt;max-width:90%" alt="Company Logo"/>
</td> -->
<td align="center" valign="center">
<img t-if="o.image" t-att-src="'data:image/png;base64,%s' % to_text(o.image)" style="max-height:85pt;max-width:90%" alt="Event Image"/>
</td>
</tr>
</td>
</table>
</td>
</tr>
<tr style="height:60%" align="center">
<td valign="center">
<table>
<tr><th><div style="font-size:15pt; margin-bottom:0pt;margin-top:0pt;" valign="center">متطوعة</div></th></tr>
</table>
</td>
</tr>
<tr style="height:10%" align="center">
<td>
<table>
<tr><td>
<t t-foreach="o.sponsor_ids" t-as="sponsor">
<t t-if="sponsor.partner_id.image">
<!-- <span t-field="sponsor.partner_id.image"/> -->
<img t-att-src="'data:image/png;base64,%s' % to_text(sponsor.partner_id.image)" style="max-height:30pt;max-width:200pt" alt="sponsor Image"/>
</t>
</t>
</td>
</tr>
</table>
</td>
</tr>
</table>
</div>
</t>
</div>
</t>
</template>
</odoo>

View File

@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<odoo>
<!-- <record model="ir.actions.act_window" id="act_open_dms_file_from_event_view">
<field name="name">Files</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">muk_dms.file</field>
<field name="view_type">form</field>
<field name="view_mode">tree,form</field>
<field name="domain">[
("event_id", "=", active_id),
]</field>
<field name="context">{
'default_event_id': active_id,
}</field>
</record> -->
<!-- <record id="view_dms_file_form" model="ir.ui.view">-->
<!-- <field name="name">muk_dms_file.form</field>-->
<!-- <field name="model">dms.file</field>-->
<!-- <field name="inherit_id" ref="dms.view_dms_file_form"/>-->
<!-- <field name="arch" type="xml">-->
<!-- <xpath expr="//field[@name='file_type_id']" position="after">-->
<!-- <field name="event_id" attrs="{'invisible':[('event_id','=',False)]}"/>-->
<!-- </xpath>-->
<!-- </field>-->
<!-- </record>-->
</odoo>

View File

@ -0,0 +1,208 @@
<?xml version="1.0"?>
<odoo>
<data>
<record model="ir.ui.view" id="view_event_mail_form">
<field name="name">event.mail.form</field>
<field name="model">event.mail</field>
<field name="inherit_id" ref="event.view_event_mail_form"/>
<field name="arch" type="xml">
<xpath expr="//sheet/notebook" position="inside">
<page string="Track Changes Mails">
<field name="mail_track_ids">
<tree string="Track Changes Mails" editable="bottom">
<field name="track_id"/>
<field name="change_date_from"/>
<field name="change_date_to"/>
<field name="mail_sent"/>
</tree>
</field>
</page>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="view_event_track_location">
<field name="name">event.track.location_inherit</field>
<field name="model">event.track.location</field>
<field name="inherit_id" ref="website_event_track.view_event_location_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="after">
<field name="location_url"/>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="view_sponsor_type">
<field name="name">sponsor_type_inherit</field>
<field name="model">event.sponsor.type</field>
<field name="inherit_id" ref="website_event_track.event_sponsor_type_view_form"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="after">
<field name="sponsor_cost"/>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="view_sponsor_type_list">
<field name="name">sponsor_type_list_inherit</field>
<field name="model">event.sponsor.type</field>
<field name="inherit_id" ref="website_event_track.event_sponsor_type_view_tree"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='name']" position="after">
<field name="sponsor_cost"/>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="view_event_form">
<field name="name">event.event.form</field>
<field name="model">event.event</field>
<field name="inherit_id" ref="event.view_event_form"/>
<field name="arch" type="xml">
<xpath expr="//div[@name='button_box']" position="inside">
<button type="object" name="action_open_files"
class="oe_stat_button" icon="fa-file-text-o" >
<field string="Files" name="count_files" widget="statinfo"/>
</button>
<button type="object" name="action_open_mail"
class="oe_stat_button" icon="fa-envelope" >
<field string="Mails" name="count_mails" widget="statinfo"/>
</button>
</xpath>
<xpath expr="//div[@name='button_box']" position="after">
<field name="image" widget='image' class="oe_avatar"/>
</xpath>
<xpath expr="//field[@name='event_type_id']" position="after">
<field name="directory_id"/>
<field name="project_id"/>
<field name="benefit_club_id"/>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="view_event_search">
<field name="name">event.event.search</field>
<field name="model">event.event</field>
<field name="inherit_id" ref="event.view_event_search"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='event_type_id']" position="after">
<field name="organizer_id"/>
<field name="project_id"/>
</xpath>
<!-- <xpath expr="//filter[@name='confirm']" position="after">-->
<!-- <filter string="Done" name="done" domain="[('state','=','done')]"/>-->
<!-- <filter string="Cancelled" name="cancel" domain="[('state','=','cancel')]"/>-->
<!-- </xpath>-->
<xpath expr="//filter[@name='upcoming']" position="after">
<filter string="This Month" name="this_month" domain="[('date_begin', '&gt;=', context_today().strftime('%Y-%m-01'))]"/>
<filter string="Last Month" name="last_month" domain="['&amp;', ('date_begin', '&gt;=', (context_today() - relativedelta(months=1)).strftime('%Y-%m-01')), ('date_begin', '&lt;', context_today().strftime('%Y-%m-01'))]"/>
<filter string="This Year" name="thisyear" domain="['|', ('date_begin', '=', False), '&amp;',('date_begin','&lt;=', time.strftime('%Y-12-31')),('date_begin','&gt;=',time.strftime('%Y-01-01'))]"/>
<filter name="lastyear" string="Last Year" domain="['&amp;',('date_begin', '&gt;=', (context_today()-relativedelta(years=1)).strftime('%Y-01-01')), ('date_begin', '&lt;=', context_today().strftime('%Y-01-01')),]"/>
</xpath>
</field>
</record>
<record model="ir.ui.view" id="view_event_track_search">
<field name="name">event.track.search</field>
<field name="model">event.track</field>
<field name="inherit_id" ref="website_event_track.view_event_track_search"/>
<field name="arch" type="xml">
<xpath expr="//filter[@name='activities_upcoming_all']" position="after">
<separator/>
<filter string="This Month" name="this_month" domain="[('date', '&gt;=', context_today().strftime('%Y-%m-01'))]"/>
<filter string="Last Month" name="last_month" domain="['&amp;', ('date', '&gt;=', (context_today() - relativedelta(months=1)).strftime('%Y-%m-01')), ('date', '&lt;', context_today().strftime('%Y-%m-01'))]"/>
<filter string="This Year" name="thisyear" domain="['|', ('date', '=', False), '&amp;',('date','&lt;=', time.strftime('%Y-12-31')),('date','&gt;=',time.strftime('%Y-01-01'))]"/>
<filter name="lastyear" string="Last Year" domain="['&amp;',('date', '&gt;=', (context_today()-relativedelta(years=1)).strftime('%Y-01-01')), ('date', '&lt;=', context_today().strftime('%Y-01-01')),]"/>
</xpath>
</field>
</record>
<record id="event_event_view_pivot" model="ir.ui.view" >
<field name="name">event.event.view.pivot</field>
<field name="model">event.event</field>
<field name="inherit_id" ref="event.event_event_view_pivot"/>
<field name="arch" type="xml">
<xpath expr="//pivot" position="attributes">
<attribute name="display_quantity" eval="true"/>
</xpath>
<xpath expr="//field[@name='name']" position="before">
<field name="event_type_id" type="row"/>
</xpath>
<xpath expr="//field[@name='seats_reserved']" position="before">
<field name="seats_unconfirmed" type="measure"/>
</xpath>
<xpath expr="//field[@name='seats_reserved']" position="after">
<field name="seats_used" type="measure"/>
<field name="sponsor_count" type="measure"/>
</xpath>
</field>
</record>
<record id="event_track_view_pivot" model="ir.ui.view" >
<field name="name">event.track.view.pivot</field>
<field name="model">event.track</field>
<field name="arch" type="xml">
<pivot string="Track" disable_linking="True">
<field name="event_id" type="row"/>
<field name="name" type="row"/>
</pivot>
</field>
</record>
<record model="ir.actions.act_window" id="action_event_track_view">
<field name="name">Events track</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">event.track</field>
<!-- <field name="view_type">form</field>-->
<field name="view_mode">pivot</field>
<field name="search_view_id" ref="website_event_track.view_event_track_search"/>
</record>
<record model="ir.ui.view" id="view_event_sponsor_search">
<field name="name">website_event_track.view_event_sponsor_search.search</field>
<field name="model">event.sponsor</field>
<field name="inherit_id" ref="website_event_track.event_sponsor_view_search"/>
<field name="arch" type="xml">
<xpath expr="//field[@name='event_id']" position="after">
<separator/>
<filter string="This Month" name="this_month" domain="[('date', '&gt;=', context_today().strftime('%Y-%m-01'))]"/>
<filter string="Last Month" name="last_month" domain="['&amp;', ('date', '&gt;=', (context_today() - relativedelta(months=1)).strftime('%Y-%m-01')), ('date', '&lt;', context_today().strftime('%Y-%m-01'))]"/>
<filter string="This Year" name="thisyear" domain="['|', ('date', '=', False), '&amp;',('date','&lt;=', time.strftime('%Y-12-31')),('date','&gt;=',time.strftime('%Y-01-01'))]"/>
<filter name="lastyear" string="Last Year" domain="['&amp;',('date', '&gt;=', (context_today()-relativedelta(years=1)).strftime('%Y-01-01')), ('date', '&lt;=', context_today().strftime('%Y-01-01')),]"/>
</xpath>
</field>
</record>
<record id="event_sponsor_view_pivot" model="ir.ui.view" >
<field name="name">event.sponsor.view.pivot</field>
<field name="model">event.sponsor</field>
<field name="arch" type="xml">
<pivot string="Sponsor" disable_linking="True">
<field name="partner_id" type="row"/>
<field name="sponsor_type_id" type="row"/>
<field name="event_type_id" type="row"/>
<field name="event_id" type="row"/>
</pivot>
</field>
</record>
<record model="ir.actions.act_window" id="action_event_sponsor_view">
<field name="name">Events sponsor</field>
<field name="type">ir.actions.act_window</field>
<field name="res_model">event.sponsor</field>
<!-- <field name="view_type">form</field>-->
<field name="view_mode">pivot</field>
</record>
<menuitem name="Events Tracks" id="menu_event_track" action="action_event_track_view" parent="event.menu_reporting_events"/>
<menuitem name="Events Sponsor" id="menu_event_sponsor" action="action_event_sponsor_view" parent="event.menu_reporting_events"/>
</data>
</odoo>

View File

@ -0,0 +1,17 @@
{
'name': 'Event Registration Batch Confirm',
'version': '1.0',
'description': 'Event Registration Batch Confirm',
'summary': 'Event Registration Batch Confirm',
'author': 'Expert Co. Ltd.',
'website': 'http://www.exp-sa.com',
'license': 'LGPL-3',
'category': 'Odex25-Event/Odex25-Event',
'depends': [
'event'
],
'data': [
'data/ir_actions_server.xml'
],
'auto_install': True,
}

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="action_batch_confirm_event_registration" model="ir.actions.server">
<field name="name">Confirm</field>
<field name="model_id" ref="event.model_event_registration"/>
<field name="binding_model_id" ref="event.model_event_registration"/>
<field name="binding_view_types">list</field>
<field name="state">code</field>
<field name="code">records.action_confirm()</field>
</record>
</odoo>

View File

@ -0,0 +1,2 @@
# -*- coding: utf-8 -*-
from . import controllers

View File

@ -0,0 +1,24 @@
# -*- coding: utf-8 -*-
{
'name': 'Events Website Custom',
'version': '1.0',
'website': 'https://www.odoo.com/page/events',
'category': 'Odex25-Event/Odex25-Event',
'summary': 'Add Extra Features to Event stander module',
'description': """
Events Custom.
==============
Key Features
------------
* Edit in Email Schedule Add appility to send emails to Attendees after change in tracks
* ...
""",
'depends': ['event_custom'],
'data': [
"views/events.xml",
"views/event_details.xml"
],
'installable': True,
'auto_install': False,
}

View File

@ -0,0 +1,3 @@
# -*- coding: utf-8 -*-
from . import controllers

View File

@ -0,0 +1,34 @@
# -*- coding: utf-8 -*-
from odoo import http,_
from odoo.http import request
import json
class Event_sponsor(http.Controller):
@http.route('/sponser/form', type='http', auth='public', methods=['GET'])
def get_sponser_form(self):
sponsoring_types = request.env['event.sponsor.type'].sudo().search([])
li = ['sequence','name']
if sponsoring_types:
data = {'status': True, 'msg': (_('Sponsoring Types Found')), 'data':sponsoring_types.read(li)}
else:
data = {'status': False, 'msg': (_('Sponsoring Types Not Found')), 'data': {}}
return json.dumps(data)
@http.route('/sponsor/submit', type='http', auth='public', csrf=False,methods=['POST'])
def sponsor_submit(self,id,**kw):
values = {}
for field_name, field_value in kw.items():
values[field_name] = field_value
if field_name == 'event_id':
field_value = request.env['event.event'].browse(int(id)).id
values[field_name] = field_value
sponsor = request.env['event.sponsor'].sudo().create(values)
li = ['event_id','partner_id', 'url', 'sponsor_type_id']
if sponsor:
data = {'status': True, 'msg': (_('sponsor Registered')), 'data': sponsor.read(li)}
else:
data = {'status': False, 'msg': (_('sponsor Not Registered')), 'data': {}}
return json.dumps(data)

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 62 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 21 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

View File

@ -0,0 +1,347 @@
/*event single page */
@font-face {
font-family: "cairo";
src: url(/event_website_custom/static/fonts/Cairo-Bold.ttf);
font-weight: 700;
}
@font-face {
font-family: "cairo";
src: url(/event_website_custom/static/fonts/Cairo-Regular.ttf);
font-weight: normal;
}
@font-face {
font-family: "cairo";
src: url(/event_website_custom/static/fonts/Cairo-SemiBold.ttf);
font-weight: 600;
}
.events_details_row {
display: flex;
flex-wrap: wrap;
font-family: "cairo";
}
.events_details_row .event_div {
flex-basis: 50%;
padding: 0 15px;
display: flex;
}
@media (max-width: 575px) {
.events_details_row .event_div {
padding: 0;
}
}
@media (max-width: 991px) {
.events_details_row .event_div {
flex-basis: 100%;
margin-bottom: 24px;
}
}
.events_details_row .event_div .wrapper {
background-color: #fff;
border-radius: 12px;
border: 1px solid #ccc;
width: 100%;
padding: 24px 32px;
}
@media (max-width: 575px) {
.events_details_row .event_div .wrapper {
padding: 16px;
}
}
.events_details_row .event_div .wrapper h4 {
font-weight: bold;
display: inline-block;
-webkit-margin-end: 8px;
margin-inline-end: 8px;
margin-bottom: 16px;
text-transform: capitalize;
color: #353a47;
font-size: 20px;
}
@media (max-width: 575px) {
.events_details_row .event_div .wrapper h4 {
font-size: 16px;
}
}
.events_details_row .event_div .wrapper .google_maps {
font-size: 16px;
font-weight: bold;
text-decoration: underline;
color: #3c5c95;
}
.events_details_row .event_div .wrapper .location,
.events_details_row .event_div .wrapper .date,
.events_details_row .event_div .wrapper .name {
display: flex;
margin-bottom: 16px;
color: #b0a9a8;
flex-wrap: wrap;
}
.events_details_row .event_div .wrapper .location svg,
.events_details_row .event_div .wrapper .date svg,
.events_details_row .event_div .wrapper .name svg {
-webkit-margin-end: 8px;
margin-inline-end: 8px;
}
.events_details_row .event_div .wrapper .location br,
.events_details_row .event_div .wrapper .location i,
.events_details_row .event_div .wrapper .date br,
.events_details_row .event_div .wrapper .date i,
.events_details_row .event_div .wrapper .name br,
.events_details_row .event_div .wrapper .name i {
display: none;
}
@media (max-width: 991px) {
.events_details_row .event_div:last-of-type {
margin-bottom: 0px;
}
}
/*sponsors_container*/
.sponsors_container {
padding: 0 30px;
}
@media (max-width: 575px) {
.sponsors_container {
padding: 0 15px;
}
}
.sponsors_container .sponsors_wrapper {
background-color: #fff;
border-radius: 12px;
border: 1px solid #ccc;
padding: 24px 32px;
}
@media (max-width: 575px) {
.sponsors_container .sponsors_wrapper {
padding: 16px;
}
}
.sponsors_container .sponsors_wrapper .row {
display: flex;
}
@media (max-width: 575px) {
.sponsors_container .sponsors_wrapper .row {
flex-wrap: wrap;
justify-content: center;
}
.sponsors_container .sponsors_wrapper .row .oe_sponsor {
margin-bottom: 24px;
}
}
.sponsors_container .sponsors_wrapper h4 {
font-weight: bold;
display: inline-block;
margin-bottom: 32px;
text-transform: capitalize;
color: #353a47;
font-size: 20px;
font-family: "cairo";
}
@media (max-width: 575px) {
.sponsors_container .sponsors_wrapper h4 {
font-size: 16px;
}
}
.join_us_container {
display: flex;
flex-wrap: wrap;
gap: 30px;
}
/*details_container*/
.join_us {
padding: 0px 15px;
}
@media (max-width: 575px) {
.join_us {
padding: 0;
}
}
.join_us .oe_structure {
display: none;
}
.join_us .wrapper {
background-color: #fff;
padding: 24px 32px;
border-radius: 16px;
border: 1px solid #ccc;
margin-bottom: 32px;
}
@media (max-width: 575px) {
.join_us .wrapper {
padding: 16px;
}
}
.join_us .wrapper h4 {
text-align: center;
font-weight: bold;
margin-bottom: 16px;
}
@media (max-width: 575px) {
.join_us .wrapper h4 {
font-size: 16px;
}
}
.join_us #registration_form, .join_us .row.mt32.mb32 {
margin: 0 !important;
}
.join_us .col-md-8 {
width: 100%;
flex: 1;
max-width: 100%;
}
.join_us .col-md-8 .col-md-3 {
flex: 1;
max-width: 100%;
}
.join_us .col-md-8 .panel-default,
.join_us .col-md-8 .panel-footer {
border: none;
box-shadow: none;
}
.join_us .col-md-8 .panel-footer {
text-align: center;
background-color: transparent;
padding: 0;
}
.join_us .css_noprint,
.join_us .panel-heading,
.join_us hr {
display: none;
}
.join_us .col-lg-offset-9 {
margin-left: auto !important;
margin-right: auto !important;
width: 100% !important;
}
.join_us .col-lg-offset-9 button {
display: inline !important;
width: -moz-fit-content;
width: fit-content;
}
/*global calsses */
.o_website_event .container.mt32.mb16.hidden-print {
display: none;
}
.d-none {
display: none !important;
}
.number_of_attendance {
float: none;
margin: auto;
width: 100%;
}
@media (max-width: 425px) {
.number_of_attendance {
width: 100%;
}
}
.number_of_attendance .my_label {
display: inline-block;
margin-bottom: 12px;
font-weight: bold;
}
.event_div .col-md-3 {
width: 100% im !important;
}
/*register modal */
.custom_modal .modal-content .modal-header {
border: none;
min-height: auto;
padding-bottom: 0;
}
.custom_modal .modal-content .modal-header .modal-title {
margin: 0;
text-align: start;
display: none;
}
.custom_modal .modal-content .modal-body {
height: 275px;
overflow: auto;
/* Track */
/* Handle */
}
@media (max-width: 575px) {
.custom_modal .modal-content .modal-body {
width: 100%;
}
}
.custom_modal .modal-content .modal-body::-webkit-scrollbar {
width: 4px;
}
.custom_modal .modal-content .modal-body::-webkit-scrollbar-track {
background: #f1f1f1;
}
.custom_modal .modal-content .modal-body::-webkit-scrollbar-thumb {
background: #3c5c95;
}
.custom_modal .modal-content .modal-body .attendans_wrapper label {
display: none;
}
.custom_modal .modal-content .modal-body .page-header {
border: none;
margin-bottom: 16px;
text-align: start;
position: relative;
width: -moz-fit-content;
width: fit-content;
padding-bottom: 16px;
margin-bottom: 24px;
}
@media (max-width: 575px) {
.custom_modal .modal-content .modal-body .page-header {
font-size: 14px;
}
}
.custom_modal .modal-content .modal-body .page-header::after {
content: "";
position: absolute;
left: 0;
bottom: -5px;
width: 60%;
height: 4px;
background-color: #3c5c95;
}
.custom_modal .modal-content .modal-body .panel-body, .custom_modal .modal-content .modal-body .panel-footer {
display: none !important;
}
/*crumb*/
.crumb {
padding: 0 15px;
}
@media (max-width: 575px) {
.crumb {
padding: 0;
}
}
.crumb .breadcrumb {
background-color: #fff;
margin: 16px 0 16px 0 !important;
border-radius: 8px;
border: 1px solid #ccc;
box-shadow: none;
padding: 12px;
}
.sponsors_wrapper {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
}
.sponsors_wrapper .btn-block {
display: block;
width: -moz-fit-content;
width: fit-content;
padding: 8px 40px;
}
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control {
background-color: #f5f5f5;
}/*# sourceMappingURL=event_details.css.map */

View File

@ -0,0 +1 @@
{"version":3,"sources":["event_details.scss","event_details.css"],"names":[],"mappings":"AAAA,qBAAA;AAEA;EACI,oBAAA;EACA,2DAAA;EACA,gBAAA;ACAJ;ADGA;EACI,oBAAA;EACA,8DAAA;EACA,mBAAA;ACDJ;ADIA;EACI,oBAAA;EACA,+DAAA;EACA,gBAAA;ACFJ;ADOA;EACI,aAAA;EACA,eAAA;EACA,oBALI;ACAR;ADOI;EACI,eAAA;EACA,eAAA;EACA,aAAA;ACLR;ADMQ;EAJJ;IAKQ,UAAA;ECHV;AACF;ADIQ;EAPJ;IAQQ,gBAAA;IACA,mBAAA;ECDV;AACF;ADEQ;EACI,sBAAA;EACA,mBAAA;EACA,sBAAA;EACA,WAAA;EACA,kBAAA;ACAZ;ADCY;EANJ;IAOQ,aAAA;ECEd;AACF;ADAY;EACI,iBAAA;EACA,qBAAA;EACA,uBAAA;UAAA,sBAAA;EACA,mBAAA;EACA,0BAAA;EACA,cAAA;EACA,eAAA;ACEhB;ADDgB;EARJ;IASQ,eAAA;ECIlB;AACF;ADDY;EACI,eAAA;EACA,iBAAA;EACA,0BAAA;EACA,cAAA;ACGhB;ADAY;;;EAGI,aAAA;EACA,mBAAA;EACA,cAAA;EACA,eAAA;ACEhB;ADAgB;;;EACI,uBAAA;UAAA,sBAAA;ACIpB;ADDgB;;;;;;EAEI,aAAA;ACOpB;ADDQ;EADJ;IAEQ,kBAAA;ECIV;AACF;;ADAA,qBAAA;AAEA;EACI,eAAA;ACEJ;ADDI;EAFJ;IAGQ,eAAA;ECIN;AACF;ADFI;EACI,sBAAA;EACA,mBAAA;EACA,sBAAA;EACA,kBAAA;ACIR;ADHQ;EALJ;IAMQ,aAAA;ECMV;AACF;ADLQ;EACI,aAAA;ACOZ;ADNY;EAFJ;IAGQ,eAAA;IACA,uBAAA;ECSd;EDRc;IACI,mBAAA;ECUlB;AACF;ADNQ;EACI,iBAAA;EACA,qBAAA;EACA,mBAAA;EACA,0BAAA;EACA,cAAA;EACA,eAAA;EACA,oBA5GJ;ACoHR;ADPY;EARJ;IASQ,eAAA;ECUd;AACF;;ADJA;EACI,aAAA;EACA,eAAA;EACA,SAAA;ACOJ;;ADLA,oBAAA;AACA;EACI,iBAAA;ACQJ;ADPI;EAFJ;IAGQ,UAAA;ECUN;AACF;ADTI;EACI,aAAA;ACWR;ADTI;EACI,sBAAA;EACA,kBAAA;EACA,mBAAA;EACA,sBAAA;EACA,mBAAA;ACWR;ADVQ;EANJ;IAOQ,aAAA;ECaV;AACF;ADZQ;EACI,kBAAA;EACA,iBAAA;EACA,mBAAA;ACcZ;ADbY;EAJJ;IAKQ,eAAA;ECgBd;AACF;ADZI;EACI,oBAAA;ACcR;ADZI;EACI,WAAA;EACA,OAAA;EACA,eAAA;ACcR;ADbQ;EACI,OAAA;EACA,eAAA;ACeZ;ADZQ;;EAEI,YAAA;EACA,gBAAA;ACcZ;ADZQ;EACI,kBAAA;EACA,6BAAA;EACA,UAAA;ACcZ;ADVI;;;EAGI,aAAA;ACYR;ADTI;EACI,4BAAA;EACA,6BAAA;EACA,sBAAA;ACWR;ADVQ;EACI,0BAAA;EACA,uBAAA;EAAA,kBAAA;ACYZ;;ADNA,kBAAA;AAEI;EACI,aAAA;ACQR;;ADJA;EACI,wBAAA;ACOJ;;ADJA;EACI,WAAA;EACA,YAAA;EACA,WAAA;ACOJ;ADNI;EAJJ;IAKQ,WAAA;ECSN;AACF;ADRI;EACI,qBAAA;EACA,mBAAA;EACA,iBAAA;ACUR;;ADLA;EACI,yBAAA;ACQJ;;ADNA,kBAAA;AAKQ;EACI,YAAA;EACA,gBAAA;EACA,iBAAA;ACKZ;ADJY;EACI,SAAA;EACA,iBAAA;EACA,aAAA;ACMhB;ADHQ;EACI,aAAA;EACA,cAAA;EASE,UAAA;EAKA,WAAA;ACPd;ADNY;EAHJ;IAIQ,WAAA;ECSd;AACF;ADPY;EACI,UAAA;ACShB;ADLY;EACI,mBAAA;ACOhB;ADHY;EACI,mBAAA;ACKhB;ADFgB;EACI,aAAA;ACIpB;ADDY;EACI,YAAA;EACA,mBAAA;EACA,iBAAA;EACA,kBAAA;EACA,uBAAA;EAAA,kBAAA;EACA,oBAAA;EACA,mBAAA;ACGhB;ADFgB;EARJ;IASQ,eAAA;ECKlB;AACF;ADJgB;EACI,WAAA;EACA,kBAAA;EACA,OAAA;EACA,YAAA;EACA,UAAA;EACA,WAAA;EACA,yBAAA;ACMpB;ADHY;EACI,wBAAA;ACKhB;ADQA,QAAA;AAEA;EACI,eAAA;ACPJ;ADQI;EAFJ;IAGQ,UAAA;ECLN;AACF;ADMI;EACI,sBAAA;EACA,gCAAA;EACA,kBAAA;EACA,sBAAA;EACA,gBAAA;EACA,aAAA;ACJR;;ADQA;EACI,aAAA;EACA,mBAAA;EACA,uBAAA;EACA,sBAAA;ACLJ;ADMI;EACI,cAAA;EACJ,uBAAA;EAAA,kBAAA;EACA,iBAAA;ACJJ;;ADQA;EAEI,yBAAA;ACNJ","file":"event_details.css"}

View File

@ -0,0 +1,349 @@
/*event single page */
@font-face {
font-family: "cairo";
src: url(/event_website_custom/static/fonts/Cairo-Bold.ttf);
font-weight: 700;
}
@font-face {
font-family: "cairo";
src: url(/event_website_custom/static/fonts/Cairo-Regular.ttf);
font-weight: normal;
}
@font-face {
font-family: "cairo";
src: url(/event_website_custom/static/fonts/Cairo-SemiBold.ttf);
font-weight: 600;
}
$cairo :"cairo";
.events_details_row {
display: flex;
flex-wrap: wrap;
font-family: $cairo ;
.event_div {
flex-basis: 50%;
padding: 0 15px;
display: flex;
@media(max-width:575px){
padding: 0;
}
@media(max-width:991px){
flex-basis:100%;
margin-bottom:24px
}
.wrapper {
background-color: #fff;
border-radius: 12px;
border: 1px solid #ccc;
width: 100%;
padding: 24px 32px;
@media(max-width:575px){
padding: 16px;
}
h4 {
font-weight: bold;
display: inline-block;
margin-inline-end: 8px;
margin-bottom: 16px;
text-transform: capitalize;
color: #353a47;
font-size: 20px;
@media(max-width:575px){
font-size:16px
}
}
.google_maps {
font-size: 16px;
font-weight: bold;
text-decoration: underline;
color: #3c5c95;
}
.location,
.date,
.name {
display: flex;
margin-bottom: 16px;
color: #b0a9a8;
flex-wrap:wrap;
svg {
margin-inline-end: 8px;
}
br,
i {
display: none;
}
}
}
}
.event_div:last-of-type{
@media(max-width:991px){
margin-bottom:0px
}
}
}
/*sponsors_container*/
.sponsors_container {
padding: 0 30px;
@media(max-width:575px){
padding: 0 15px;
}
.sponsors_wrapper {
background-color: #fff;
border-radius: 12px;
border: 1px solid #ccc;
padding: 24px 32px;
@media(max-width:575px){
padding: 16px;
}
.row{
display:flex;
@media(max-width:575px){
flex-wrap: wrap;
justify-content: center;
.oe_sponsor{
margin-bottom: 24px;
}
}
}
h4 {
font-weight: bold;
display: inline-block;
margin-bottom: 32px;
text-transform: capitalize;
color: #353a47;
font-size: 20px;
font-family: $cairo;
@media(max-width:575px){
font-size:16px
}
}
}
}
.join_us_container{
display: flex;
flex-wrap: wrap;
gap: 30px;
}
/*details_container*/
.join_us {
padding: 0px 15px ;
@media(max-width:575px){
padding: 0;
}
.oe_structure{
display: none;
}
.wrapper{
background-color: #fff;
padding: 24px 32px;
border-radius: 16px;
border: 1px solid #ccc;
margin-bottom: 32px;
@media(max-width:575px){
padding: 16px;
}
h4{
text-align: center;
font-weight: bold;
margin-bottom: 16px;
@media(max-width:575px){
font-size:16px
}
}
}
#registration_form, .row.mt32.mb32{
margin: 0 !important;
}
.col-md-8 {
width: 100%;
flex: 1;
max-width: 100%;
.col-md-3{
flex: 1;
max-width: 100%;
}
.panel-default,
.panel-footer {
border: none;
box-shadow: none;
}
.panel-footer{
text-align:center;
background-color: transparent;
padding:0;
}
}
.css_noprint,
.panel-heading,
hr {
display: none
}
.col-lg-offset-9 {
margin-left: auto !important;
margin-right: auto !important;
width: 100% !important;
button{
display: inline !important;
width: fit-content;
}
}
}
/*global calsses */
.o_website_event {
.container.mt32.mb16.hidden-print{
display: none;
}
}
.d-none{
display:none !important
}
.number_of_attendance{
float:none;
margin:auto;
width: 100%;
@media(max-width:425px){
width: 100%;
}
.my_label{
display: inline-block;
margin-bottom: 12px;
font-weight: bold;
}
}
.event_div .col-md-3{
width: 100% im !important;
}
/*register modal */
.custom_modal{
.modal-content{
.modal-header{
border:none;
min-height:auto;
padding-bottom:0;
.modal-title{
margin:0;
text-align:start;
display: none;
}
}
.modal-body{
height:275px;
overflow:auto;
@media(max-width:575px){
width:100%;
}
&::-webkit-scrollbar {
width: 4px;
}
/* Track */
&::-webkit-scrollbar-track {
background: #f1f1f1;
}
/* Handle */
&::-webkit-scrollbar-thumb {
background: #3c5c95;
}
.attendans_wrapper{
label{
display:none;
}
}
.page-header{
border:none;
margin-bottom: 16px;
text-align: start;
position: relative;
width:fit-content;
padding-bottom: 16px;
margin-bottom: 24px;
@media(max-width:575px){
font-size:14px
}
&::after {
content: '';
position: absolute;
left: 0;
bottom: -5px;
width: 60%;
height: 4px;
background-color: #3c5c95;
}
}
.panel-body, .panel-footer{
display:none !important
}
}
.modal-footer{
}
}
}
/*crumb*/
.crumb{
padding: 0 15px;
@media(max-width:575px){
padding: 0;
}
.breadcrumb {
background-color: #fff;
margin: 16px 0 16px 0 !important;
border-radius: 8px;
border: 1px solid #ccc;
box-shadow: none;
padding: 12px;
}
}
.sponsors_wrapper{
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
.btn-block{
display: block;
width: fit-content;
padding: 8px 40px;
}
}
.form-control[disabled], .form-control[readonly], fieldset[disabled] .form-control{
background-color: #f5f5f5;
}

View File

@ -0,0 +1,136 @@
body {
background-color: #f5f5f5;
}
.events_title {
color: #353a47;
font-weight: bold;
position: relative;
width: -moz-fit-content;
width: fit-content;
margin-bottom: 16px;
}
.events_title::after {
content: "";
position: absolute;
left: 0;
bottom: -5px;
width: 50%;
height: 4px;
background-color: #3c5c95;
}
.main_events_container .breadcrumb {
-webkit-padding-start: 0;
padding-inline-start: 0;
}
.main_events_container .events_row {
display: flex;
flex-wrap: wrap;
}
@media (max-width: 1200px) {
.main_events_container #middle_column {
width: 70%;
}
}
@media (max-width: 991px) {
.main_events_container #middle_column {
width: 100%;
}
}
.main_events_container .events_list {
display: flex;
flex-wrap: wrap;
padding: 0;
background-color: #fff;
padding: 24px 9px 0;
border-radius: 16px;
margin: 0;
height: 100%;
}
.main_events_container .events_list .single_event {
flex-basis: 50%;
padding: 0 15px;
margin: 0;
display: flex;
list-style: none;
}
@media (max-width: 767px) {
.main_events_container .events_list .single_event {
width: 100%;
flex-basis: 100%;
}
}
.main_events_container .events_list .single_event .event_content {
padding: 16px;
background-color: #f8f8f8;
margin-bottom: 24px;
border: 1px solid #eaeaea;
border-radius: 8px;
width: 100%;
}
.main_events_container .events_list .single_event .event_content h4 {
margin-bottom: 16px;
}
.main_events_container .events_list .single_event .event_content h4 a {
color: #353a47;
font-weight: bold;
-webkit-margin-end: 6px;
margin-inline-end: 6px;
text-transform: capitalize;
}
.main_events_container .events_list .single_event .event_content .event_data {
margin-bottom: 12px;
color: #b0a9a8;
}
.main_events_container .events_list .single_event .event_content .event_data i {
-webkit-margin-end: 4px;
margin-inline-end: 4px;
}
.main_events_container .events_list .single_event .event_content .event_data:last-of-type {
margin-bottom: 0;
}
/*categories */
@media (max-width: 1200px) {
.events_categories {
width: 30%;
}
}
@media (max-width: 991px) {
.events_categories {
width: 100%;
margin-bottom: 24px;
}
}
.events_categories .nav-pills {
background-color: #fff;
height: 100%;
overflow: hidden;
border-radius: 16px;
}
.events_categories .nav-pills li a {
color: #b6bab7;
transition: 0.3s all ease-in-out;
padding: 8px 16px;
font-weight: 600;
margin-bottom: 8px;
}
.events_categories .nav-pills li.active a {
background-color: #e1e6ef;
color: #3c5c95;
}
/*media */
@media (max-width: 767px) {
.single_event {
flex-basis: 100%;
}
.single_event .event_content h4 {
font-size: 16px;
}
}
/*global styles */
.fa-fw {
width: unset;
}/*# sourceMappingURL=events.css.map */

View File

@ -0,0 +1 @@
{"version":3,"sources":["events.scss","events.css"],"names":[],"mappings":"AAAA;EACI,yBAAA;ACCJ;;ADEA;EACI,cAAA;EACA,iBAAA;EACA,kBAAA;EACA,uBAAA;EAAA,kBAAA;EACA,mBAAA;ACCJ;ADCI;EACI,WAAA;EACA,kBAAA;EACA,OAAA;EACA,YAAA;EACA,UAAA;EACA,WAAA;EACA,yBAAA;ACCR;;ADII;EACI,wBAAA;UAAA,uBAAA;ACDR;ADII;EACI,aAAA;EACA,eAAA;ACFR;ADMQ;EADJ;IAEQ,UAAA;ECHV;AACF;ADIQ;EAJJ;IAKQ,WAAA;ECDV;AACF;ADGI;EACI,aAAA;EACA,eAAA;EACA,UAAA;EACA,sBAAA;EACA,mBAAA;EACA,mBAAA;EACA,SAAA;EACA,YAAA;ACDR;ADGQ;EACI,eAAA;EACA,eAAA;EACA,SAAA;EACA,aAAA;EACA,gBAAA;ACDZ;ADEY;EANJ;IAOQ,WAAA;IACA,gBAAA;ECCd;AACF;ADEY;EACI,aAAA;EACA,yBAAA;EACA,mBAAA;EACA,yBAAA;EACA,kBAAA;EACA,WAAA;ACAhB;ADEgB;EACI,mBAAA;ACApB;ADEoB;EACI,cAAA;EACA,iBAAA;EACA,uBAAA;UAAA,sBAAA;EACA,0BAAA;ACAxB;ADIgB;EACI,mBAAA;EACA,cAAA;ACFpB;ADIoB;EACI,uBAAA;UAAA,sBAAA;ACFxB;ADMgB;EACI,gBAAA;ACJpB;;ADaA,cAAA;AAEI;EADJ;IAEQ,UAAA;ECVN;AACF;ADWI;EAJJ;IAKQ,WAAA;IACA,mBAAA;ECRN;AACF;ADSI;EACI,sBAAA;EACA,YAAA;EACA,gBAAA;EACA,mBAAA;ACPR;ADUY;EACI,cAAA;EACA,gCAAA;EACA,iBAAA;EACA,gBAAA;EACA,kBAAA;ACRhB;ADYQ;EACI,yBAAA;EACA,cAAA;ACVZ;;ADgBA,SAAA;AAEA;EACI;IACI,gBAAA;ECdN;EDiBU;IACI,eAAA;ECfd;AACF;ADoBA,iBAAA;AAEA;EACI,YAAA;ACnBJ","file":"events.css"}

View File

@ -0,0 +1,152 @@
body {
background-color: #f5f5f5;
}
.events_title {
color: #353a47;
font-weight: bold;
position: relative;
width: fit-content;
margin-bottom: 16px;
&::after {
content: '';
position: absolute;
left: 0;
bottom: -5px;
width: 50%;
height: 4px;
background-color: #3c5c95;
}
}
.main_events_container {
.breadcrumb {
padding-inline-start: 0
}
.events_row {
display: flex;
flex-wrap: wrap;
}
#middle_column{
@media(max-width:1200px){
width:70%;
}
@media(max-width:991px){
width:100%;
}
}
.events_list {
display: flex;
flex-wrap: wrap;
padding: 0;
background-color: #fff;
padding: 24px 9px 0;
border-radius: 16px;
margin: 0;
height: 100%;
.single_event {
flex-basis: 50%;
padding: 0 15px;
margin: 0;
display: flex;
list-style: none;
@media(max-width:767px){
width:100%;
flex-basis:100%;
}
.event_content {
padding: 16px;
background-color: #f8f8f8;
margin-bottom: 24px;
border: 1px solid #eaeaea;
border-radius: 8px;
width: 100%;
h4 {
margin-bottom: 16px;
a {
color: #353a47;
font-weight: bold;
margin-inline-end: 6px;
text-transform: capitalize;
}
}
.event_data {
margin-bottom: 12px;
color: #b0a9a8;
i {
margin-inline-end: 4px;
}
}
.event_data:last-of-type {
margin-bottom: 0;
}
}
}
}
}
/*categories */
.events_categories {
@media(max-width:1200px){
width:30%
}
@media(max-width:991px){
width:100%;
margin-bottom: 24px;
}
.nav-pills {
background-color: #fff;
height: 100%;
overflow: hidden;
border-radius: 16px;
li {
a {
color: #b6bab7;
transition: .3s all ease-in-out;
padding: 8px 16px;
font-weight: 600;
margin-bottom: 8px
}
}
li.active a {
background-color: #e1e6ef;
color: #3c5c95
}
}
}
/*media */
@media(max-width:767px) {
.single_event {
flex-basis: 100%;
.event_content {
h4 {
font-size: 16px
}
}
}
}
/*global styles */
.fa-fw {
width: unset;
}

View File

@ -0,0 +1,48 @@
$(document).ready(function () {
$('.trigger_sponsors_modal').click(function () {
$('#sponsors_modal').modal('show');
})
// integrate the sponsors types API
let typeURL = "/sponser/form";
fetch(typeURL)
.then(response => response.json())
.then(res => {
typeList = res.data;
console.log(typeList);
typeList.forEach(function (index) {
$('#sponsprs_types').append(`<option id="${index.id}" value="${index.id}">${index.name} </option>`);
})
});
let create_sponsor = "/sponsor/submit";
$('form#sponsors_form_reg').on('submit', function (evt) {
console.log('form is submitting now !!');
evt.preventDefault();
var sponsors_data = {
id: $('#sponsors_form_reg #eid').val(),
sponsor_type_id: $('#sponsprs_types').val(),
partner_id: $('#userId').val(),
event_id: $('#eventId').val(),
url: $('#url').val()
}
$.ajax({
url: `${create_sponsor}?id=${sponsors_data.id}&sponsor_type_id=${sponsors_data.sponsor_type_id}&partner_id=${sponsors_data.partner_id}&event_id=${sponsors_data.event_id}&url="${sponsors_data.url}"`,
type: "POST",
data: sponsors_data,
success: function (response) {
console.log(response);
console.log('data sent successfully !!!');
$('.new_sponsor').append(`<p class="alert alert-success"> ${response.msg} </p>`)
setTimeout(function () {
$('.new_sponsor').hide();
location.reload();
}, 4000);
},
error: function (err) {
console.log(err);
}
});
});
});

View File

@ -0,0 +1,395 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="event_details" inherit_id="website_event.event_details" name="Events Details">
<xpath expr="//div[@class='container']" position="replace">
<div class="container bread_container">
<div class="crumb" id="event_menu">
<ol class="breadcrumb mb0" t-if="not event.menu_id">
<li><a href="/event">All Events</a></li>
<li t-if="event.event_type_id">
<a t-attf-href="/event?type=#{event.event_type_id.id}" t-esc="event.event_type_id.name"/>
</li>
<li t-if="event.country_id">
<a t-attf-href="/event?country=#{event.country_id.id}" t-esc="event.country_id.name"/>
</li>
<li class="active">
<span t-field="event.name"/>
</li>
</ol>
<ol name="Event Menu" class="breadcrumb mb0" id="event_menu" t-if="event.menu_id" t-att-data-content_menu_id="editable and event.menu_id.id">
<t t-foreach="event.menu_id.child_id" t-as="submenu">
<t t-call="website.submenu"/>
</t>
</ol>
</div>
</div>
<div itemscope="itemscope" itemtype="http://schema.org/Event" class="container details_container">
<div class="events_details_row mb32">
<!-- Event organizer info -->
<div class="event_div">
<div class="wrapper">
<h4 itemprop="name" class="event_name" t-field="event.name"></h4>
<div class="event_info">
<div class="name">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-user" width="16" height="16" viewBox="0 0 24 24" stroke-width="1.5" stroke="#2c3e50" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<circle cx="12" cy="7" r="4" />
<path d="M6 21v-2a4 4 0 0 1 4 -4h4a4 4 0 0 1 4 4v2" />
</svg>
<span class="org_name" t-field="event.organizer_id" t-options='{
"widget": "contact",
"fields": ["name"]
}' />
</div>
<div class="date">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-calendar" width="16" height="16" viewBox="0 0 24 24" stroke-width="1.5" stroke="#2c3e50" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<rect x="4" y="5" width="16" height="16" rx="2" />
<line x1="16" y1="3" x2="16" y2="7" />
<line x1="8" y1="3" x2="8" y2="7" />
<line x1="4" y1="11" x2="20" y2="11" />
<line x1="11" y1="15" x2="12" y2="15" />
<line x1="12" y1="15" x2="12" y2="18" />
</svg>
<span t-field="event.with_context(tz=event.date_tz).date_begin" t-options='{"hide_seconds":"True"}'> </span>
</div>
<div class="location">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-map-pin" width="16" height="16" viewBox="0 0 24 24" stroke-width="1.5" stroke="#2c3e50" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<circle cx="12" cy="11" r="3" />
<path d="M17.657 16.657l-4.243 4.243a2 2 0 0 1 -2.827 0l-4.244 -4.243a8 8 0 1 1 11.314 0z" />
</svg>
<span t-field="event.organizer_id" t-options='{
"widget": "contact",
"fields": ["address"]
}' />
</div>
</div>
</div>
</div>
<!-- location on the map -->
<div class="event_div">
<div class="wrapper">
<h4> Location on the Map </h4>
<span>
<t t-if="event.google_map_img()">
<a t-att-href="event.google_map_link()" target="_BLANK">
<img t-att-src="event.google_map_img()" width="100%%"/>
</a>
</t>
<t t-else="1">
<a class="google_maps" t-att-href="event.google_map_link()" target="_BLANK">Google Maps</a>
</t>
</span>
<div class="event_info">
<div class="location">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-map-pin" width="16" height="16" viewBox="0 0 24 24" stroke-width="1.5" stroke="#2c3e50" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<circle cx="12" cy="11" r="3" />
<path d="M17.657 16.657l-4.243 4.243a2 2 0 0 1 -2.827 0l-4.244 -4.243a8 8 0 1 1 11.314 0z" />
</svg>
<span t-field="event.organizer_id" t-options='{
"widget": "contact",
"fields": ["address"]
}' />
</div>
<div class="location">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-phone" width="16" height="16" viewBox="0 0 24 24" stroke-width="1.5" stroke="#2c3e50" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<path d="M5 4h4l2 5l-2.5 1.5a11 11 0 0 0 5 5l1.5 -2.5l5 2v4a2 2 0 0 1 -2 2a16 16 0 0 1 -15 -15a2 2 0 0 1 2 -2" />
</svg>
<span t-field="event.organizer_id" t-options='{
"widget": "contact",
"fields": ["phone", "mobile"]
}' />
</div>
<div class="location">
<svg xmlns="http://www.w3.org/2000/svg" class="icon icon-tabler icon-tabler-mail-opened" width="16" height="16" viewBox="0 0 24 24" stroke-width="1.5" stroke="#2c3e50" fill="none" stroke-linecap="round" stroke-linejoin="round">
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
<polyline points="3 9 12 15 21 9 12 3 3 9" />
<path d="M21 9v10a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-10" />
<line x1="3" y1="19" x2="9" y2="13" />
<line x1="15" y1="13" x2="21" y2="19" />
</svg>
<span t-field="event.organizer_id" t-options='{
"widget": "contact",
"fields": ["email"]
}' />
</div>
</div>
</div>
</div>
</div>
</div>
<div class="container events_details_row ">
<div class="join_us event_div">
<div class="wrapper sponsors_wrapper">
<h4> Join us now in <t t-esc="event.name"/> </h4>
<div class="row mt32 mb32">
<t t-raw="0"/>
</div>
</div>
</div>
<div class="join_us event_div">
<div class="wrapper">
<h4> Join as a Sponsor </h4>
<span class="trigger_sponsors_modal btn btn-primary btn-block"> Join </span>
<div id="response"></div>
<div id="sponsors_modal" class="modal custom_modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog modal-lg">
<form id="sponsors_form_reg" method="POST" class="form">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
<h4 class="modal-title" id="myModalLabel"><strong>Sponsors</strong></h4>
</div>
<div class="modal-body">
<!-- <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/> -->
<input type="hidden" id="eid" name="id" t-att-value="event.id"/>
<div class="form-group">
<label for="sponsprs_types"> Sponsor Type </label>
<select name="sponsor_type_id" id="sponsprs_types" class="form-control custom-select">
<option value="-- Select Type --" id="select_type" disabled="disabled"> -- Select Type -- </option>
</select>
</div>
<input type="hidden" id="userId" name="partner_id" t-att-value="request.env.user.id"/>
<input type="hidden" id="eventId" name="event_id" t-att-value="event.id"/>
<div class="form-group">
<label> URL </label>
<input type="text" id="url" name="url" class="input form-control"/>
</div>
<div class="new_sponsor w-100"></div>
</div>
<div class="modal-footer">
<div class="">
<button type="submit" id="submit" class="btn btn-primary submit_sponsors">Continue</button>
</div>
</div>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
<div class="container sponsors_container mb16 hidden-print" t-if="event.sponsor_ids">
<div class="sponsors_wrapper">
<h4 class="text-center">Our Sponsors</h4>
<div class="row">
<div t-attf-class="oe_sponsor" t-foreach="event.sponsor_ids" t-as="sponsor">
<t t-if="sponsor.url">
<a t-att-href="sponsor.url" style="position: relative; display: inline-block;">
<span t-field="sponsor.image_medium"
t-options='{"widget": "image", "class": "shadow"}'/>
<div class="ribbon-wrapper">
<div t-field="sponsor.sponsor_type_id" t-attf-class="ribbon ribbon_#{sponsor.sponsor_type_id.name}"/>
</div>
</a>
</t>
<t t-if="not sponsor.url">
<span style="position: relative; display: inline-block;">
<span t-field="sponsor.image_medium"
t-options='{"widget": "image", "class": "shadow"}'/>
<div class="ribbon-wrapper">
<div t-field="sponsor.sponsor_type_id" t-attf-class="ribbon ribbon_#{sponsor.sponsor_type_id.name}"/>
</div>
</span>
</t>
</div>
</div>
</div>
</div>
</xpath>
</template>
<template id="sponsors_holder" inherit_id="website_event_track.event_sponsor" >
<xpath expr="//div[hasclass('container')]" position="replace">
</xpath>
</template>
<!-- modal_attendees_registration -->
<template id="attendans" inherit_id="website_event.registration_attendee_details" >
<xpath expr="//div[@id='modal_attendees_registration']" position="replace">
<div id="modal_attendees_registration" class="modal custom_modal fade" tabindex="-1" role="dialog">
<div class="modal-dialog modal-lg">
<form id="attendee_registration" t-attf-action="/event/#{slug(event)}/registration/confirm" method="post" class="js_website_submit_form">
<input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">x</button>
<h4 class="modal-title" id="myModalLabel"><strong>Attendees</strong></h4>
</div>
<div class="modal-body">
<div class="container">
<t t-set="counter_type" t-value="1"/>
<t t-set="counter" t-value="0"/>
<t t-foreach="tickets" t-as="ticket">
<h4 class="page-header mt16">
<strong>
Ticket Type #<t t-raw="counter_type"/>: <t t-esc="ticket['name']"/>
<t t-if="ticket['price'] == 0">(Free)</t>
</strong>
</h4>
<t t-foreach="range(1, ticket['quantity'] + 1)" t-as="att_counter" name="attendee_loop">
<t t-set="counter" t-value="counter + 1"/>
<div class="row mb4">
<t t-set="attendee_placeholder">Attendee #%s</t>
<div class="attendans_wrapper">
<div class="col-md-12">
<div class="form-group">
<label> Name </label>
<input class='form-control' type='text' t-attf-name="#{counter}-name" required="This field is required" t-att-placeholder="attendee_placeholder %counter"/>
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<label> Email </label>
<input class='form-control' placeholder="Email" type='email' t-attf-name="#{counter}-email" required="This field is required"/>
</div>
</div>
<div class="col-md-12">
<div class="form-group">
<label> Phone </label>
<input class='form-control' placeholder="Phone" type='tel' t-attf-name="#{counter}-phone"/>
</div>
</div>
</div>
<input class='hidden' type='text' t-attf-name="#{counter}-ticket_id" t-attf-value="#{ticket['id']}"/>
</div>
</t>
<t t-id="myReg" t-call="website_event.registration_template">
<div class="form-group">
<label> Quantity </label>
<div class="col-xs-6 col-md-3">
<t t-if="tickets_available">
<link itemprop="availability" content="http://schema.org/InStock"/>
<t t-raw="quantity"/>
</t>
<t t-else="">
<span itemprop="availability" content="http://schema.org/SoldOut">
Sold Out
</span>
</t>
</div>
</div>
<div class="form-group">
<div class="col-xs-6 col-md-3" t-raw="price"/>
</div>
<div class="registeration_end">
Registration End Date
<div class="col-xs-6 col-md-3" t-raw="registration_end"/>
</div>
</t>
<t t-set="counter_type" t-value="counter_type + 1"/>
</t>
</div>
</div>
<div class="modal-footer">
<div class="pull-left">
<button type="submit" class="btn btn-primary">Continue</button>
<button type="button" class="btn btn-default js_goto_event" data-dismiss="modal">Cancel Registration</button>
</div>
</div>
</div>
</form>
</div>
</div>
</xpath>
</template>
<!-- <template id="reg_temp" inherit_id="website_event.registration_template" name="event reg">-->
<!-- <xpath expr="//form[@id='registration_form']" position="replace">-->
<!-- <form id="registration_form" t-attf-action="/event/#{slug(event)}/registration/new" method="post" class="panel panel-default" t-if="buy">-->
<!-- <input type="hidden" name="csrf_token" t-att-value="request.csrf_token()"/>-->
<!-- <t t-id="tickets">-->
<!-- <t t-set="registration_end">-->
<!-- <t t-if="event.date_begin">-->
<!-- Date : -->
<!-- <span t-esc="event.date_begin_located"/>-->
<!-- </t>-->
<!-- <t t-if="not event.date_begin">-->
<!-- <span>Unlimited</span>-->
<!-- </t>-->
<!-- </t>-->
<!-- <t t-set="price">-->
<!-- Price is -->
<!-- <span itemprop="price" content="0">-->
<!-- Free-->
<!-- </span>-->
<!-- </t>-->
<!-- <t t-set="quantity">-->
<!-- <span class="my_label"> Number of Attendance </span>-->
<!-- <select name="nb_register-0" class="form-control">-->
<!-- <t t-foreach="range(1, (event.seats_availability == 'unlimited' or event.seats_available &gt; 9) and 10 or event.seats_available+1)" t-as="nb">-->
<!-- <option t-esc="nb" t-att-selected="nb == 1 and 'selected'"/>-->
<!-- </t>-->
<!-- </select>-->
<!-- </t>-->
<!-- </t>-->
<!-- <div class="panel-footer">-->
<!-- <div class="row">-->
<!-- <div class="col-md-4 col-md-offset-8 col-lg-3 col-lg-offset-9">-->
<!-- <button type="submit" class="btn btn-primary btn-lg btn-block a-submit" t-attf-id="#{event.id}">-->
<!-- Register Now-->
<!-- </button>-->
<!-- </div>-->
<!-- </div>-->
<!-- </div>-->
<!-- </form>-->
<!-- </xpath>-->
<!-- </template>-->
<!-- <template id="ticket_redesign" inherit_id="website_event.ticket" name="ticket design">-->
<!-- <xpath expr="//div[@class='panel-body']" position="replace">-->
<!-- <div class="panel-body">-->
<!-- <div class="row" itemscope="itemscope" itemtype="http://schema.org/Offer">-->
<!-- <div class="col-xs-6 d-none end_reg hidden-md hidden-lg">-->
<!-- <h6>End of Registration</h6>-->
<!-- </div>-->
<!-- <div class="col-xs-6 d-none col-md-3" itemprop="availabilityEnds" t-raw="registration_end"/>-->
<!-- <div class="clearfix d-none hidden-md hidden-lg mb4"/>-->
<!-- <div class="col-xs-6 d-none hidden-md hidden-lg">-->
<!-- <h6>Price</h6>-->
<!-- </div>-->
<!-- <div class="col-xs-6 col-md-3 d-none" t-raw="price"/>-->
<!-- <div class="clearfix hidden-md d-none hidden-lg mb4"/>-->
<!-- <div class="col-xs-6 hidden-md d-none hidden-lg">-->
<!-- <h6>Quantity</h6>-->
<!-- </div>-->
<!-- <div class="col-xs-6 number_of_attendance col-md-3">-->
<!-- <t t-if="tickets_available">-->
<!-- <link itemprop="availability" content="http://schema.org/InStock"/>-->
<!-- <t t-raw="quantity"/>-->
<!-- </t>-->
<!-- <t t-else="">-->
<!-- <span itemprop="availability" content="http://schema.org/SoldOut">-->
<!-- Sold Out-->
<!-- </span>-->
<!-- </t>-->
<!-- </div>-->
<!-- </div>-->
<!-- <script src="/event_website_custom/static/src/js/sponsors.js"></script>-->
<!-- </div>-->
<!-- </xpath>-->
<!-- </template>-->
<template id="events_details_assets" inherit_id="website.assets_frontend" name="events details">
<xpath expr="." position="inside">
<link rel="stylesheet" href="/event_website_custom/static/src/css/event_details.css"/>
</xpath>
</template>
</odoo>

View File

@ -0,0 +1,101 @@
<?xml version="1.0" encoding="utf-8"?>
<odoo>
<template id="custom_events" inherit_id="website_event.index" name="Events Holder">
<xpath expr="//div[@class='container']" position="replace">
<div class="container main_events_container">
<link rel="stylesheet" href="/event_website_custom/static/src/css/events.css"/>
<h2 class="events_title"> Events </h2>
<div class="row mt8">
<div class="col-sm-12">
<ol class="breadcrumb mb0">
<li>
<a href="/event">Our Events</a>
</li>
<li t-if="current_date"><t t-esc="current_date"/></li>
<li t-if="current_type"><t t-esc="current_type.name"/></li>
<li t-if="current_country"><t t-esc="current_country.name"/></li>
</ol>
</div>
</div>
<div class="row">
<div class="col-sm-6 col-xs-offset-3">
<t t-call="website.pager"/>
</div>
</div>
<div class="row mt32 events_row mb32">
<div class="col-lg-9" id="middle_column">
<div class="text-center text-muted" t-if="not event_ids">
<h1>No event found</h1>
<p groups="event.group_event_manager">Use the top menu <i>'Content'</i> to create your first event.</p>
</div>
<ul class="events_list">
<li t-foreach="event_ids" t-as="event" class="single_event">
<div itemscope="itemscope" itemtype="http://schema.org/Event" class="event_content">
<h4 class="media-heading">
<a itemprop="url" t-att-class="event.state == 'done' and 'text-success'" t-attf-href="/event/#{ slug(event) }/#{(not event.menu_id) and 'register' or ''}">
<span itemprop="name" t-field="event.name" class="event_name"> </span>
</a>
<small t-if="event.is_participating" class="label label-info">Participating</small>
<small t-if="event.is_online" class="label label-info">Online</small>
<small t-if="not event.website_published" class="label label-danger">unpublished</small>
</h4>
<div class="org_by event_data">
<t t-if="event.organizer_id">
Organized by: <span t-field="event.organizer_id"> </span>
</t>
</div>
<div class="event_date event_data">
<i class="fa fa-clock-o"></i> <span itemprop="startDate" t-field="event.with_context(tz=event.date_tz).date_begin" t-options='{"hide_seconds":"True"}'> </span> <i>to</i> <span itemprop="endDate" t-field="event.with_context(tz=event.date_tz).date_end" t-options='{"hide_seconds":"True"}'> </span>
</div>
<t t-if="not event.is_online">
<div class="event_location event_data" itemprop="location" t-field="event.address_id" t-options='{
"widget": "contact",
"fields": ["city"]
}'/>
</t>
<div class="text-muted event_tag event_data" t-if="event.event_type_id">
<i class="fa fa-tag"></i> <span t-field="event.event_type_id"/>
</div>
</div>
</li>
</ul>
</div>
<!-- <div class="col-md-3 oe_structure" id="right_column">
</div> -->
</div>
<div class="row">
<div class="col-sm-6 col-xs-offset-3">
<t t-call="website.pager"/>
</div>
</div>
</div>
</xpath>
</template>
<template id="event_left_column" customize_show="True" inherit_id="website_event.index" name="Filters">
<xpath expr="//div[@id='middle_column']" position="attributes">
<attribute name="class">col-md-6</attribute>
</xpath>
<xpath expr="//div[@id='middle_column']" position="before">
<div class="col-lg-3 css_noprint events_categories" id="left_column">
<ul class="nav nav-pills nav-stacked">
<t t-foreach="dates" t-as="date">
<li t-att-class="searches.get('date') == date[0] and 'active' or None" t-if="date[3] or (date[0] in ('old','all'))">
<a t-attf-href="/event?{{ keep_query('country', 'type', date=date[0]) }}"><t t-esc="date[1]"/>
<span t-if="date[3]" class="badge pull-right"><t t-esc="date[3]"/></span>
</a>
</li>
</t>
</ul>
</div>
</xpath>
<xpath expr="//div[@id='middle_column']" position="attributes">
<attribute name="class">col-lg-9</attribute>
</xpath>
</template>
<!-- <template id="events_assets" inherit_id="website.assets_frontend" name="events">
<xpath expr="." position="inside">
</xpath>
</template> -->
</odoo>

View File

@ -0,0 +1,165 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

View File

@ -0,0 +1,120 @@
==============
MuK Autovacuum
==============
Allows the administrator to create rules to automatically garbage collect
a certain model. Every rule can have a different time interval additional
constraints. An extra constraint can be for example to only delete inactive
records.
Installation
============
To install this module, you need to:
Download the module and add it to your Odoo addons folder. Afterward, log on to
your Odoo server and go to the Apps menu. Trigger the debug mode and update the
list by clicking on the "Update Apps List" link. Now install the module by
clicking on the install button.
Another way to install this module is via the package management for Python
(`PyPI <https://pypi.org/project/pip/>`_).
To install our modules using the package manager make sure
`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed
correctly. Then open a console and install the module by entering the following
command:
``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>``
The module name consists of the Odoo version and the module name, where
underscores are replaced by a dash.
**Module:**
``odoo<version>-addon-<module_name>``
**Example:**
``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils``
Once the installation has been successfully completed, the app is already in the
correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the
debug mode and update the list by clicking on the "Update Apps List" link. Now
install the module by clicking on the install button.
The biggest advantage of this variant is that you can now also update the app
using the "pip" command. To do this, enter the following command in your console:
``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>``
When the process is finished, restart your server and update the application in
Odoo. The steps are the same as for the installation only the button has changed
from "Install" to "Upgrade".
You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_
and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_.
For modules licensed under OPL-1, you will receive access data when you purchase
the module. If the modules were not purchased directly from
`MuK IT <https://www.mukit.at/>`_ please contact our support (support@mukit.at)
with a confirmation of purchase to receive the corresponding access data.
Upgrade
============
To upgrade this module, you need to:
Download the module and add it to your Odoo addons folder. Restart the server
and log on to your Odoo server. Select the Apps menu and upgrade the module by
clicking on the upgrade button.
If you installed the module using the "pip" command, you can also update the
module in the same way. Just type the following command into the console:
``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>``
When the process is finished, restart your server and update the application in
Odoo, just like you would normally.
Configuration
=============
To configure this module, you need to:
#. Go to *Settings* while being in debug mode.
#. Afterwards go to *Technical -> Automation -> Auto Vacuum Rules*.
#. And create a new rule.
Usage
=============
This module has no direct visible effect on the system. The garbage collections
happens during the autovacuum cron job.
Credits
=======
Contributors
------------
* Mathias Markl <mathias.markl@mukit.at>
Images
------------
Some pictures are based on or inspired by the icon set of Font Awesome:
* `Font Awesome <https://fontawesome.com>`_
Author & Maintainer
-------------------
This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_.
MuK IT is an Austrian company specialized in customizing and extending Odoo.
We develop custom solutions for your individual needs to help you focus on
your strength and expertise to grow your business.
If you want to get in touch please contact us via mail
(sale@mukit.at) or visit our website (https://mukit.at).

View File

@ -0,0 +1,23 @@
###################################################################################
#
# Copyright (c) 2017-2019 MuK IT GmbH.
#
# This file is part of MuK Autovacuum
# (see https://mukit.at).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###################################################################################
from . import models

View File

@ -0,0 +1,56 @@
###################################################################################
#
# Copyright (c) 2017-2019 MuK IT GmbH.
#
# This file is part of MuK Autovacuum
# (see https://mukit.at).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###################################################################################
{
'name': 'MuK Autovacuum',
'summary': 'Configure automatic garbage collection',
'version': '12.0.3.0.1',
'category': 'Extra Tools',
'license': 'LGPL-3',
'author': 'MuK IT',
'website': 'https://www.mukit.at',
'live_test_url': 'https://mukit.at/r/SgN',
'contributors': [
'Mathias Markl <mathias.markl@mukit.at>',
],
'depends': [
'muk_utils',
],
'data': [
'security/ir.model.access.csv',
'views/rules.xml',
'data/rules.xml',
],
'qweb': [
'static/src/xml/*.xml',
],
'images': [
'static/description/banner.png'
],
'external_dependencies': {
'python': [],
'bin': [],
},
'application': False,
'installable': True,
'auto_install': False,
}

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2017-2019 MuK IT GmbH.
This file is part of MuK Autovacuum
(see https://mukit.at).
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo noupdate="1">
<record id="data_autovacuum_logs" model="muk_autovacuum.rules">
<field name="name">Delete Logs after 2 Weeks</field>
<field name="model" ref="base.model_ir_logging"/>
<field name="time_field" ref="base.field_ir_logging__create_date"/>
<field name="active" eval="False" />
<field name="state">time</field>
<field name="time_type">weeks</field>
<field name="time">2</field>
<field name="protect_starred" eval="False" />
</record>
</odoo>

View File

@ -0,0 +1,20 @@
`2.1.0`
-------
- Added Python Expressions
`2.0.0`
-------
- Migrated to Python 3
`1.1.0`
-------
- Add field selector
`1.0.0`
-------
- Init version

View File

@ -0,0 +1,120 @@
==============
MuK Autovacuum
==============
Allows the administrator to create rules to automatically garbage collect
a certain model. Every rule can have a different time interval additional
constraints. An extra constraint can be for example to only delete inactive
records.
Installation
============
To install this module, you need to:
Download the module and add it to your Odoo addons folder. Afterward, log on to
your Odoo server and go to the Apps menu. Trigger the debug mode and update the
list by clicking on the "Update Apps List" link. Now install the module by
clicking on the install button.
Another way to install this module is via the package management for Python
(`PyPI <https://pypi.org/project/pip/>`_).
To install our modules using the package manager make sure
`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed
correctly. Then open a console and install the module by entering the following
command:
``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>``
The module name consists of the Odoo version and the module name, where
underscores are replaced by a dash.
**Module:**
``odoo<version>-addon-<module_name>``
**Example:**
``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils``
Once the installation has been successfully completed, the app is already in the
correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the
debug mode and update the list by clicking on the "Update Apps List" link. Now
install the module by clicking on the install button.
The biggest advantage of this variant is that you can now also update the app
using the "pip" command. To do this, enter the following command in your console:
``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>``
When the process is finished, restart your server and update the application in
Odoo. The steps are the same as for the installation only the button has changed
from "Install" to "Upgrade".
You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_
and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_.
For modules licensed under OPL-1, you will receive access data when you purchase
the module. If the modules were not purchased directly from
`MuK IT <https://www.mukit.at/>`_ please contact our support (support@mukit.at)
with a confirmation of purchase to receive the corresponding access data.
Upgrade
============
To upgrade this module, you need to:
Download the module and add it to your Odoo addons folder. Restart the server
and log on to your Odoo server. Select the Apps menu and upgrade the module by
clicking on the upgrade button.
If you installed the module using the "pip" command, you can also update the
module in the same way. Just type the following command into the console:
``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>``
When the process is finished, restart your server and update the application in
Odoo, just like you would normally.
Configuration
=============
To configure this module, you need to:
#. Go to *Settings* while being in debug mode.
#. Afterwards go to *Technical -> Automation -> Auto Vacuum Rules*.
#. And create a new rule.
Usage
=============
This module has no direct visible effect on the system. The garbage collections
happens during the autovacuum cron job.
Credits
=======
Contributors
------------
* Mathias Markl <mathias.markl@mukit.at>
Images
------------
Some pictures are based on or inspired by the icon set of Font Awesome:
* `Font Awesome <https://fontawesome.com>`_
Author & Maintainer
-------------------
This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_.
MuK IT is an Austrian company specialized in customizing and extending Odoo.
We develop custom solutions for your individual needs to help you focus on
your strength and expertise to grow your business.
If you want to get in touch please contact us via mail
(sale@mukit.at) or visit our website (https://mukit.at).

View File

@ -0,0 +1,402 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * muk_autovacuum
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0-20190522\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-12 23:43+0000\n"
"PO-Revision-Date: 2019-07-12 23:43+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: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>Warning</code>: Warning Exception to use with <code>raise</code>"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>b64encode</code>, <code>b64decode</code>: Base64 converter"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>date_format</code>, <code>datetime_format</code>: server date and time formats"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>env</code>: Odoo Environment on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>logger.info(message)</code>: Python logging framework"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>model</code>: Odoo Model of the record on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>uid</code>, <code>user</code>: User on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active
msgid "Active"
msgstr "نشط"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "All"
msgstr "الكل"
#. module: muk_autovacuum
#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule
#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules
#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree
msgid "Auto Vacuum Rules"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum
msgid "Automatic Vacuum"
msgstr "تفريغ تلقائي"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Code Based"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Code Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code which will be executed during the clean up."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid
msgid "Created by"
msgstr "أنشئ بواسطة"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date
msgid "Created on"
msgstr "أنشئ في"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Days"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Delete all records which match the domain."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Delete older data than x."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Delete records with am index greater than x."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name
msgid "Display Name"
msgstr "اسم العرض"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Do not delete starred records.\n"
" Checks for the following fields:\n"
" - starred\n"
" - favorite\n"
" - is_starred\n"
" - is_favorite"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Domain"
msgstr "النطاق"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Domain Based"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Domain Settings"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Enter Python code here. Help about Python expression is available in the help tab of this document."
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,size_type:0
msgid "Fixed Value"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74
#, python-format
msgid "GC domain: %s"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71
#, python-format
msgid "GC domain: [] order: %s limit: %s"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87
#, python-format
msgid "GC'd %s %s records"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83
#, python-format
msgid "GC'd %s attachments from %s entries"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Group By"
msgstr "تجميع حسب"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help"
msgstr "المساعدة"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help with Python expressions"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Hours"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id
msgid "ID"
msgstr "المعرف"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:290
#, python-format
msgid "Import Template for Auto Vacuum Rules"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update
msgid "Last Modified on"
msgstr "آخر تعديل في"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid
msgid "Last Updated by"
msgstr "آخر تحديث بواسطة"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date
msgid "Last Updated on"
msgstr "آخر تحديث في"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Minutes"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Model"
msgstr "النموذج"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name
msgid "Model Name"
msgstr "إسم النموذج"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model
msgid "Model on which the rule is applied."
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Months"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name
msgid "Name"
msgstr "الاسم"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only Archived"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only Attachments"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only delete archived records."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only delete record attachments."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Order by which the index is defined."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Protect Starred"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state
msgid "Rule Type"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:330
#, python-format
msgid "Rule validation has failed!"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence
msgid "Sequence"
msgstr "التسلسل"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size
msgid "Size"
msgstr "الحجم"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Size Based"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Size Order"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Size Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type
msgid "Size Type"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Size Value"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter
#: selection:muk_autovacuum.rules,size_type:0
msgid "System Parameter"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Time"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Time Based"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field
msgid "Time Field"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Time Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type
msgid "Time Unit"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Various fields may use Python code or Python expressions. The following variables can be used:"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Weeks"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Years"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "e.g. Delete Logs after 30 Days"
msgstr ""

View File

@ -0,0 +1,408 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * muk_autovacuum
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0-20190522\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-12 23:43+0000\n"
"PO-Revision-Date: 2019-07-12 23:43+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: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>Warning</code>: Warning Exception to use with <code>raise</code>"
msgstr "<code>Warnung:</code> Warnausnahme, die bei <code>einer Erhöhung</code> Anwendung findet"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>b64encode</code>, <code>b64decode</code>: Base64 converter"
msgstr "<code>b64encode</code>, <code>b64decode</code>: Base64 Converter"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>date_format</code>, <code>datetime_format</code>: server date and time formats"
msgstr "<code>date_format</code>, <code>datetime_format</code>: Serverdatum und Zeitformate"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>env</code>: Odoo Environment on which the rule is triggered"
msgstr "<code>env</code>: Odoo Umgebung in welcher die Regel angewendet wird"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>logger.info(message)</code>: Python logging framework"
msgstr "<code>logger.info(message)</code>: Python-Protokollierungs-Framework"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>model</code>: Odoo Model of the record on which the rule is triggered"
msgstr "<code>model</code>: Odoo Modell des Datensatzes, auf dem die Regel angewendet wird"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries"
msgstr "<code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone:</code> nützliche Python-Bibliotheken"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>uid</code>, <code>user</code>: User on which the rule is triggered"
msgstr "<code>uid</code>, <code>Benutzer</code>: Benutzer an dem die Regel angewendet wird"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active
msgid "Active"
msgstr "Aktiv"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "All"
msgstr "Alle"
#. module: muk_autovacuum
#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule
#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules
#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree
msgid "Auto Vacuum Rules"
msgstr "Auto Vacuum Regeln"
#. module: muk_autovacuum
#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum
msgid "Automatic Vacuum"
msgstr "Automatisch aufräumen"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Code Based"
msgstr "Codebasiert"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Code Settings"
msgstr "Codeeinstellungen"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code which will be executed during the clean up."
msgstr "Code, der während der Bereinigung ausgeführt wird."
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid
msgid "Created by"
msgstr "Erstellt von"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date
msgid "Created on"
msgstr "Erstellt am"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Days"
msgstr "Tage"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Delete all records which match the domain."
msgstr "Löschen Sie alle Datensätze, die mit der Domäne übereinstimmen."
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Delete older data than x."
msgstr "Ältere Daten als x löschen."
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Delete records with am index greater than x."
msgstr "Datensätze mit einem Index größer als x löschen."
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name
msgid "Display Name"
msgstr "Anzeigename"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Do not delete starred records.\n"
" Checks for the following fields:\n"
" - starred\n"
" - favorite\n"
" - is_starred\n"
" - is_favorite"
msgstr "Löscht keine markierten Datensätze.\n"
" Überprüft die folgenden Felder:\n"
" - mit Sternen übersät\n"
" - starred\n"
" - favorite\n"
" - is_starred\n"
" - is_favorite"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Domain"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Domain Based"
msgstr "Domainenbasiert"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Domain Settings"
msgstr "Domaineinstellungen"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Enter Python code here. Help about Python expression is available in the help tab of this document."
msgstr "Geben Sie Pyhton-Code hier ein. Hife zu Python-Ausdrücken ist in der Hilfe-Registerkarte dieses Dokuments verfügbar."
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,size_type:0
msgid "Fixed Value"
msgstr "Fixpunktwert"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74
#, python-format
msgid "GC domain: %s"
msgstr "GC Domain: %s"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71
#, python-format
msgid "GC domain: [] order: %s limit: %s"
msgstr "GC Domain: [] order: %s limit: %s"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87
#, python-format
msgid "GC'd %s %s records"
msgstr "GC'd %s %s Aufnahmen"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83
#, python-format
msgid "GC'd %s attachments from %s entries"
msgstr "GC'd %s Anhänge aus %s Einträgen"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Group By"
msgstr "Gruppieren nach"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help"
msgstr "Hilfe"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help with Python expressions"
msgstr "Hilfe mit Python-Ausdrücken"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Hours"
msgstr "Stunden"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id
msgid "ID"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:290
#, python-format
msgid "Import Template for Auto Vacuum Rules"
msgstr "Importvorlage für die automatischen Aufräumregeln"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update
msgid "Last Modified on"
msgstr "Zuletzt geändert am"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid
msgid "Last Updated by"
msgstr "Zuletzt aktualisiert durch"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date
msgid "Last Updated on"
msgstr "Zuletzt aktualisiert am"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Minutes"
msgstr "Minuten"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Model"
msgstr "Modell"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name
msgid "Model Name"
msgstr "Modellname"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model
msgid "Model on which the rule is applied."
msgstr "Modell, auf das die Regel angewendet wird."
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Months"
msgstr "Monate"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name
msgid "Name"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only Archived"
msgstr "Nur Archiviert"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only Attachments"
msgstr "Nur Anhänge"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only delete archived records."
msgstr "Löschen Sie nur archivierte Sätze."
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only delete record attachments."
msgstr "Löschen Sie nur Datensatzanhänge."
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Order by which the index is defined."
msgstr "Reihenfolge, in der der Index definiert ist."
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Protect Starred"
msgstr "Schützt Favoriten"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state
msgid "Rule Type"
msgstr "Regeltyp"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:330
#, python-format
msgid "Rule validation has failed!"
msgstr "Die Regelvalidierung ist fehlgeschlagen!"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence
msgid "Sequence"
msgstr "Nummernfolge"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size
msgid "Size"
msgstr "Größe"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Size Based"
msgstr "Größenbasierend"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Size Order"
msgstr "Größensortierung"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Size Settings"
msgstr "Größeneinstellung"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type
msgid "Size Type"
msgstr "Größe Typ"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Size Value"
msgstr "Größenwert"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter
#: selection:muk_autovacuum.rules,size_type:0
msgid "System Parameter"
msgstr "Systemparameter"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Time"
msgstr "Zeit"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Time Based"
msgstr "Zeitbasiert"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field
msgid "Time Field"
msgstr "Zeitfeld"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Time Settings"
msgstr "Zeiteinstellungen"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type
msgid "Time Unit"
msgstr "Zeiteinheit"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Various fields may use Python code or Python expressions. The following variables can be used:"
msgstr "Einige Felder erlauben Python Code oder Python Ausdrücke. Die folgenden Variablen können verwendet werden:"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Weeks"
msgstr "Wochen"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Years"
msgstr "Jahre"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "e.g. Delete Logs after 30 Days"
msgstr "z.B. Protokolle nach 30 Tagen löschen"

View File

@ -0,0 +1,407 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * muk_autovacuum
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0-20190522\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-12 23:43+0000\n"
"PO-Revision-Date: 2019-07-12 23:43+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: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>Warning</code>: Warning Exception to use with <code>raise</code>"
msgstr "<code>Advertencia</code>: Excepción de Advertencia para usar con <code>aumento</code>"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>b64encode</code>, <code>b64decode</code>: Base64 converter"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>date_format</code>, <code>datetime_format</code>: server date and time formats"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>env</code>: Odoo Environment on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>logger.info(message)</code>: Python logging framework"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>model</code>: Odoo Model of the record on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>uid</code>, <code>user</code>: User on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active
msgid "Active"
msgstr "Activo"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "All"
msgstr "Todos"
#. module: muk_autovacuum
#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule
#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules
#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree
msgid "Auto Vacuum Rules"
msgstr "Reglas de vacío automático"
#. module: muk_autovacuum
#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum
msgid "Automatic Vacuum"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code"
msgstr "Código"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Code Based"
msgstr "Basado en código"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Code Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code which will be executed during the clean up."
msgstr "Código que se ejecutará durante la limpieza."
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid
msgid "Created by"
msgstr "Creado por"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date
msgid "Created on"
msgstr "Creado el"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Days"
msgstr "Días"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Delete all records which match the domain."
msgstr "Elimina todos los registros que coincidan con el dominio."
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Delete older data than x."
msgstr "Borrar datos anteriores a x."
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Delete records with am index greater than x."
msgstr "Eliminar registros con un índice am mayor que x."
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name
msgid "Display Name"
msgstr "Nombre mostrado"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Do not delete starred records.\n"
" Checks for the following fields:\n"
" - starred\n"
" - favorite\n"
" - is_starred\n"
" - is_favorite"
msgstr "No borre los registros marcados con asterisco.\n"
" Verifica los siguientes campos:\n"
" - marcado\n"
" - preferido\n"
" - is_starred\n"
" - is_favorite"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Domain"
msgstr "Dominio"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Domain Based"
msgstr "Basado en dominio"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Domain Settings"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Enter Python code here. Help about Python expression is available in the help tab of this document."
msgstr "Introduzca código Python aquí. Ayuda disponible sobre expresiones Python en la pestaña de ayuda de este documento."
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,size_type:0
msgid "Fixed Value"
msgstr "Valor Fijo"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74
#, python-format
msgid "GC domain: %s"
msgstr "Dominio GC: %s"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71
#, python-format
msgid "GC domain: [] order: %s limit: %s"
msgstr "Dominio GC: [] orden: Límite en %s: %s"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87
#, python-format
msgid "GC'd %s %s records"
msgstr "GC'd %s %s registros"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83
#, python-format
msgid "GC'd %s attachments from %s entries"
msgstr "GC'd %s adjuntos de las entradas %s"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Group By"
msgstr "Agrupar por"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help"
msgstr "Ayuda"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help with Python expressions"
msgstr "Ayuda con expresiones Python"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Hours"
msgstr "Horas"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id
msgid "ID"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:290
#, python-format
msgid "Import Template for Auto Vacuum Rules"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update
msgid "Last Modified on"
msgstr "Última modificación en"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid
msgid "Last Updated by"
msgstr "Última actualización por"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date
msgid "Last Updated on"
msgstr "Última actualización el"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Minutes"
msgstr "Actas"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Model"
msgstr "Modelo"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name
msgid "Model Name"
msgstr "Nombre del modelo"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model
msgid "Model on which the rule is applied."
msgstr "Modelo sobre el que se aplica la norma."
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Months"
msgstr "Meses"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name
msgid "Name"
msgstr "Nombre"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only Archived"
msgstr "Sólo archivado"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only Attachments"
msgstr "Sólo archivos adjuntos"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only delete archived records."
msgstr "Borrar sólo registros archivados."
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only delete record attachments."
msgstr "Sólo borre los archivos adjuntos de los registros."
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Order by which the index is defined."
msgstr "Orden por el que se define el índice."
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Protect Starred"
msgstr "Proteger Estrellado"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state
msgid "Rule Type"
msgstr "Clase de regla"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:330
#, python-format
msgid "Rule validation has failed!"
msgstr "La validación de reglas ha fallado!"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence
msgid "Sequence"
msgstr "Secuencia"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size
msgid "Size"
msgstr "Tamaño"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Size Based"
msgstr "Basado en el tamaño"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Size Order"
msgstr "Orden de tallas"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Size Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type
msgid "Size Type"
msgstr "Tamaño Tipo"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Size Value"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter
#: selection:muk_autovacuum.rules,size_type:0
msgid "System Parameter"
msgstr "Parámetros del sistema"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Time"
msgstr "Tiempo"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Time Based"
msgstr "Basado en el tiempo"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field
msgid "Time Field"
msgstr "Campo de tiempo"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Time Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type
msgid "Time Unit"
msgstr "Unidad de tiempo"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Various fields may use Python code or Python expressions. The following variables can be used:"
msgstr "Varios campos pueden usar código Python o expresiones Python. Se pueden usar las siguientes variables:"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Weeks"
msgstr "Semanas"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Years"
msgstr "Años"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "e.g. Delete Logs after 30 Days"
msgstr ""

View File

@ -0,0 +1,407 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * muk_autovacuum
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0-20190522\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-12 23:43+0000\n"
"PO-Revision-Date: 2019-07-12 23:43+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: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>Warning</code>: Warning Exception to use with <code>raise</code>"
msgstr "<code/><code/>"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>b64encode</code>, <code>b64decode</code>: Base64 converter"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>date_format</code>, <code>datetime_format</code>: server date and time formats"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>env</code>: Odoo Environment on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>logger.info(message)</code>: Python logging framework"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>model</code>: Odoo Model of the record on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries"
msgstr "<code/><code/><code/><code/>"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>uid</code>, <code>user</code>: User on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active
msgid "Active"
msgstr "Actif"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "All"
msgstr "Tous"
#. module: muk_autovacuum
#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule
#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules
#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree
msgid "Auto Vacuum Rules"
msgstr "Règles de l'aspirateur automatique"
#. module: muk_autovacuum
#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum
msgid "Automatic Vacuum"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Code Based"
msgstr "Basé sur le code"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Code Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code which will be executed during the clean up."
msgstr "Code qui sera exécuté pendant le nettoyage."
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid
msgid "Created by"
msgstr "Créé par"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date
msgid "Created on"
msgstr "Créé le"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Days"
msgstr "Jours"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Delete all records which match the domain."
msgstr "Supprimer tous les enregistrements qui correspondent au domaine."
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Delete older data than x."
msgstr "Supprimer les données plus anciennes que x."
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Delete records with am index greater than x."
msgstr "Supprimer les enregistrements dont l'index am est supérieur à x."
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name
msgid "Display Name"
msgstr "Nom affiché"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Do not delete starred records.\n"
" Checks for the following fields:\n"
" - starred\n"
" - favorite\n"
" - is_starred\n"
" - is_favorite"
msgstr "Ne supprimez pas les disques marqués d'une étoile.\n"
" Vérification des champs suivants :\n"
" - étoilés\n"
" - favori\n"
" - is_starred\n"
" - is_favorite"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Domain"
msgstr "Domaine"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Domain Based"
msgstr "Basé sur le domaine"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Domain Settings"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Enter Python code here. Help about Python expression is available in the help tab of this document."
msgstr "Entrer du code Python ici. Une aide sur l'expression Python est disponible dans l'onglet d'aide de ce document."
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,size_type:0
msgid "Fixed Value"
msgstr "Valeur fixe"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74
#, python-format
msgid "GC domain: %s"
msgstr "Domaine GC : %s"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71
#, python-format
msgid "GC domain: [] order: %s limit: %s"
msgstr "GC : (] Ordre : Limite %s : %s"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87
#, python-format
msgid "GC'd %s %s records"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83
#, python-format
msgid "GC'd %s attachments from %s entries"
msgstr "GC'd %s pièces jointes à partir d'entrées %s"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Group By"
msgstr "Regrouper par"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help"
msgstr "Aide"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help with Python expressions"
msgstr "Aide sur les expressions Python"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Hours"
msgstr "Heures"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id
msgid "ID"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:290
#, python-format
msgid "Import Template for Auto Vacuum Rules"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update
msgid "Last Modified on"
msgstr "Dernière modification le"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid
msgid "Last Updated by"
msgstr "Dernière mise à jour par"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date
msgid "Last Updated on"
msgstr "Dernière mise à jour le"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Minutes"
msgstr "Procès-verbal"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Model"
msgstr "Modèle"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name
msgid "Model Name"
msgstr "Nom de Modèle"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model
msgid "Model on which the rule is applied."
msgstr "Modèle sur lequel la règle est appliquée."
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Months"
msgstr "Mois"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name
msgid "Name"
msgstr "Nom"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only Archived"
msgstr "Uniquement archivé"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only Attachments"
msgstr "Uniquement les pièces jointes"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only delete archived records."
msgstr "Ne supprimez que les enregistrements archivés."
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only delete record attachments."
msgstr "Ne supprimez que les pièces jointes d'enregistrement."
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Order by which the index is defined."
msgstr "Ordre dans lequel l'indice est défini."
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Protect Starred"
msgstr "Protéger Starred"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state
msgid "Rule Type"
msgstr "Type de règle"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:330
#, python-format
msgid "Rule validation has failed!"
msgstr "La validation des règles a échoué !"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence
msgid "Sequence"
msgstr "Séquence"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size
msgid "Size"
msgstr "Taille"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Size Based"
msgstr "Basé sur la taille"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Size Order"
msgstr "Taille Commande"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Size Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type
msgid "Size Type"
msgstr "Taille Type"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Size Value"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter
#: selection:muk_autovacuum.rules,size_type:0
msgid "System Parameter"
msgstr "Paramètres du système"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Time"
msgstr "Temps"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Time Based"
msgstr "Basé sur le temps"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field
msgid "Time Field"
msgstr "Champ horaire"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Time Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type
msgid "Time Unit"
msgstr "Unité de temps"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Various fields may use Python code or Python expressions. The following variables can be used:"
msgstr "Divers champs peuvent utiliser du code ou des expressions Python. Les variables suivantes peuvent être utilisées :"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Weeks"
msgstr "Semaines"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Years"
msgstr "Années"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "e.g. Delete Logs after 30 Days"
msgstr ""

View File

@ -0,0 +1,402 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * muk_autovacuum
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0-20190522\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-12 23:44+0000\n"
"PO-Revision-Date: 2019-07-12 23:44+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: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>Warning</code>: Warning Exception to use with <code>raise</code>"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>b64encode</code>, <code>b64decode</code>: Base64 converter"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>date_format</code>, <code>datetime_format</code>: server date and time formats"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>env</code>: Odoo Environment on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>logger.info(message)</code>: Python logging framework"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>model</code>: Odoo Model of the record on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>uid</code>, <code>user</code>: User on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active
msgid "Active"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "All"
msgstr ""
#. module: muk_autovacuum
#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule
#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules
#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree
msgid "Auto Vacuum Rules"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum
msgid "Automatic Vacuum"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Code Based"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Code Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code which will be executed during the clean up."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid
msgid "Created by"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date
msgid "Created on"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Days"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Delete all records which match the domain."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Delete older data than x."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Delete records with am index greater than x."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name
msgid "Display Name"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Do not delete starred records.\n"
" Checks for the following fields:\n"
" - starred\n"
" - favorite\n"
" - is_starred\n"
" - is_favorite"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Domain"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Domain Based"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Domain Settings"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Enter Python code here. Help about Python expression is available in the help tab of this document."
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,size_type:0
msgid "Fixed Value"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74
#, python-format
msgid "GC domain: %s"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71
#, python-format
msgid "GC domain: [] order: %s limit: %s"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87
#, python-format
msgid "GC'd %s %s records"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83
#, python-format
msgid "GC'd %s attachments from %s entries"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Group By"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help with Python expressions"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Hours"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id
msgid "ID"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:290
#, python-format
msgid "Import Template for Auto Vacuum Rules"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update
msgid "Last Modified on"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid
msgid "Last Updated by"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date
msgid "Last Updated on"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Minutes"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Model"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name
msgid "Model Name"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model
msgid "Model on which the rule is applied."
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Months"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name
msgid "Name"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only Archived"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only Attachments"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only delete archived records."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only delete record attachments."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Order by which the index is defined."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Protect Starred"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state
msgid "Rule Type"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:330
#, python-format
msgid "Rule validation has failed!"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence
msgid "Sequence"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size
msgid "Size"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Size Based"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Size Order"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Size Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type
msgid "Size Type"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Size Value"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter
#: selection:muk_autovacuum.rules,size_type:0
msgid "System Parameter"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Time"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Time Based"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field
msgid "Time Field"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Time Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type
msgid "Time Unit"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Various fields may use Python code or Python expressions. The following variables can be used:"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Weeks"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Years"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "e.g. Delete Logs after 30 Days"
msgstr ""

View File

@ -0,0 +1,402 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * muk_autovacuum
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0-20190522\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-12 23:44+0000\n"
"PO-Revision-Date: 2019-07-12 23:44+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: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>Warning</code>: Warning Exception to use with <code>raise</code>"
msgstr "<code>Waarschuwing</code>: Waarschuwingsfout te gebruiken met <code>roep op</code>"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>b64encode</code>, <code>b64decode</code>: Base64 converter"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>date_format</code>, <code>datetime_format</code>: server date and time formats"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>env</code>: Odoo Environment on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>logger.info(message)</code>: Python logging framework"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>model</code>: Odoo Model of the record on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries"
msgstr "<code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: handige Python libraries"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>uid</code>, <code>user</code>: User on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active
msgid "Active"
msgstr "Actief"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "All"
msgstr "Alle"
#. module: muk_autovacuum
#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule
#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules
#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree
msgid "Auto Vacuum Rules"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum
msgid "Automatic Vacuum"
msgstr "Automatisch vacuum"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Code Based"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Code Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code which will be executed during the clean up."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid
msgid "Created by"
msgstr "Aangemaakt door"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date
msgid "Created on"
msgstr "Aangemaakt op"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Days"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Delete all records which match the domain."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Delete older data than x."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Delete records with am index greater than x."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name
msgid "Display Name"
msgstr "Weergavenaam"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Do not delete starred records.\n"
" Checks for the following fields:\n"
" - starred\n"
" - favorite\n"
" - is_starred\n"
" - is_favorite"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Domain"
msgstr "Domein"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Domain Based"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Domain Settings"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Enter Python code here. Help about Python expression is available in the help tab of this document."
msgstr "Geef hier Python code in. Help over het gebruik van Python expressies is beschikbaar in de help tab van dit document."
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,size_type:0
msgid "Fixed Value"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74
#, python-format
msgid "GC domain: %s"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71
#, python-format
msgid "GC domain: [] order: %s limit: %s"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87
#, python-format
msgid "GC'd %s %s records"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83
#, python-format
msgid "GC'd %s attachments from %s entries"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Group By"
msgstr "Groepeer op"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help with Python expressions"
msgstr "Help met Python expressies"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Hours"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id
msgid "ID"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:290
#, python-format
msgid "Import Template for Auto Vacuum Rules"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update
msgid "Last Modified on"
msgstr "Laatst gewijzigd op"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid
msgid "Last Updated by"
msgstr "Laatst bijgewerkt door"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date
msgid "Last Updated on"
msgstr "Laatst bijgewerkt op"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Minutes"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Model"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name
msgid "Model Name"
msgstr "Modelnaam"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model
msgid "Model on which the rule is applied."
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Months"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name
msgid "Name"
msgstr "Naam"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only Archived"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only Attachments"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only delete archived records."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only delete record attachments."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Order by which the index is defined."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Protect Starred"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state
msgid "Rule Type"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:330
#, python-format
msgid "Rule validation has failed!"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence
msgid "Sequence"
msgstr "Volgorde"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size
msgid "Size"
msgstr "Grootte"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Size Based"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Size Order"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Size Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type
msgid "Size Type"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Size Value"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter
#: selection:muk_autovacuum.rules,size_type:0
msgid "System Parameter"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Time"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Time Based"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field
msgid "Time Field"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Time Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type
msgid "Time Unit"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Various fields may use Python code or Python expressions. The following variables can be used:"
msgstr "Verschillende velden mogen Python code of Python expressies gebruiken. De volgende variabelen mogen worden gebruikt:"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Weeks"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Years"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "e.g. Delete Logs after 30 Days"
msgstr ""

View File

@ -0,0 +1,402 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * muk_autovacuum
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0-20190522\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-12 23:44+0000\n"
"PO-Revision-Date: 2019-07-12 23:44+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: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>Warning</code>: Warning Exception to use with <code>raise</code>"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>b64encode</code>, <code>b64decode</code>: Base64 converter"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>date_format</code>, <code>datetime_format</code>: server date and time formats"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>env</code>: Odoo Environment on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>logger.info(message)</code>: Python logging framework"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>model</code>: Odoo Model of the record on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>uid</code>, <code>user</code>: User on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active
msgid "Active"
msgstr "Ativo"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "All"
msgstr "Todas"
#. module: muk_autovacuum
#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule
#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules
#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree
msgid "Auto Vacuum Rules"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum
msgid "Automatic Vacuum"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Code Based"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Code Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code which will be executed during the clean up."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid
msgid "Created by"
msgstr "Criado por"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date
msgid "Created on"
msgstr "Criada em"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Days"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Delete all records which match the domain."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Delete older data than x."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Delete records with am index greater than x."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name
msgid "Display Name"
msgstr "Nome a Exibir"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Do not delete starred records.\n"
" Checks for the following fields:\n"
" - starred\n"
" - favorite\n"
" - is_starred\n"
" - is_favorite"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Domain"
msgstr "Domínio"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Domain Based"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Domain Settings"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Enter Python code here. Help about Python expression is available in the help tab of this document."
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,size_type:0
msgid "Fixed Value"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74
#, python-format
msgid "GC domain: %s"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71
#, python-format
msgid "GC domain: [] order: %s limit: %s"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87
#, python-format
msgid "GC'd %s %s records"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83
#, python-format
msgid "GC'd %s attachments from %s entries"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Group By"
msgstr "Agrupar Por"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help"
msgstr "Ajuda"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help with Python expressions"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Hours"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id
msgid "ID"
msgstr "Id."
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:290
#, python-format
msgid "Import Template for Auto Vacuum Rules"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update
msgid "Last Modified on"
msgstr "Última Modificação em"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid
msgid "Last Updated by"
msgstr "Última Atualização por"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date
msgid "Last Updated on"
msgstr "Última Atualização em"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Minutes"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Model"
msgstr "Modelo"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name
msgid "Model Name"
msgstr "Nome do Modelo"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model
msgid "Model on which the rule is applied."
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Months"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name
msgid "Name"
msgstr "Nome"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only Archived"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only Attachments"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only delete archived records."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only delete record attachments."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Order by which the index is defined."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Protect Starred"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state
msgid "Rule Type"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:330
#, python-format
msgid "Rule validation has failed!"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence
msgid "Sequence"
msgstr "Sequência"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size
msgid "Size"
msgstr "Tamanho"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Size Based"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Size Order"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Size Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type
msgid "Size Type"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Size Value"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter
#: selection:muk_autovacuum.rules,size_type:0
msgid "System Parameter"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Time"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Time Based"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field
msgid "Time Field"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Time Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type
msgid "Time Unit"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Various fields may use Python code or Python expressions. The following variables can be used:"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Weeks"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Years"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "e.g. Delete Logs after 30 Days"
msgstr ""

View File

@ -0,0 +1,402 @@
# Translation of Odoo Server.
# This file contains the translation of the following modules:
# * muk_autovacuum
#
msgid ""
msgstr ""
"Project-Id-Version: Odoo Server 12.0-20190522\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2019-07-12 23:45+0000\n"
"PO-Revision-Date: 2019-07-12 23:45+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: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>Warning</code>: Warning Exception to use with <code>raise</code>"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>b64encode</code>, <code>b64decode</code>: Base64 converter"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>date_format</code>, <code>datetime_format</code>: server date and time formats"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>env</code>: Odoo Environment on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>logger.info(message)</code>: Python logging framework"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>model</code>: Odoo Model of the record on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "<code>uid</code>, <code>user</code>: User on which the rule is triggered"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__active
msgid "Active"
msgstr "Активно"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "All"
msgstr "Все"
#. module: muk_autovacuum
#: model:ir.actions.act_window,name:muk_autovacuum.action_autovacuum_rule
#: model:ir.model,name:muk_autovacuum.model_muk_autovacuum_rules
#: model:ir.ui.menu,name:muk_autovacuum.menu_autovacuum_rules
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_tree
msgid "Auto Vacuum Rules"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model,name:muk_autovacuum.model_ir_autovacuum
msgid "Automatic Vacuum"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Code Based"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Code Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__code
msgid "Code which will be executed during the clean up."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_uid
msgid "Created by"
msgstr "Создано"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__create_date
msgid "Created on"
msgstr "Создан"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Days"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Delete all records which match the domain."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Delete older data than x."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Delete records with am index greater than x."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__display_name
msgid "Display Name"
msgstr "Отображаемое Имя"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Do not delete starred records.\n"
" Checks for the following fields:\n"
" - starred\n"
" - favorite\n"
" - is_starred\n"
" - is_favorite"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__domain
msgid "Domain"
msgstr "Домен"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Domain Based"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Domain Settings"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Enter Python code here. Help about Python expression is available in the help tab of this document."
msgstr "Введите код Python здесь. Помощь о Python доступна в колонке справка в этом документе."
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,size_type:0
msgid "Fixed Value"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:64
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:74
#, python-format
msgid "GC domain: %s"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:71
#, python-format
msgid "GC domain: [] order: %s limit: %s"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:87
#, python-format
msgid "GC'd %s %s records"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/ir_autovacuum.py:83
#, python-format
msgid "GC'd %s attachments from %s entries"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Group By"
msgstr "Группировать по"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help"
msgstr "Помощь"
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Help with Python expressions"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Hours"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__id
msgid "ID"
msgstr "Номер"
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:290
#, python-format
msgid "Import Template for Auto Vacuum Rules"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules____last_update
msgid "Last Modified on"
msgstr "Последнее изменение"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_uid
msgid "Last Updated by"
msgstr "Последний раз обновил"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__write_date
msgid "Last Updated on"
msgstr "Последнее обновление"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Minutes"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_search
msgid "Model"
msgstr "Модель"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__model_name
msgid "Model Name"
msgstr "Название модели"
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__model
msgid "Model on which the rule is applied."
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Months"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__name
msgid "Name"
msgstr "Название"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only Archived"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only Attachments"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_inactive
msgid "Only delete archived records."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__only_attachments
msgid "Only delete record attachments."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,help:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Order by which the index is defined."
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__protect_starred
msgid "Protect Starred"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__state
msgid "Rule Type"
msgstr ""
#. module: muk_autovacuum
#: code:addons/muk_autovacuum/models/rules.py:330
#, python-format
msgid "Rule validation has failed!"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__sequence
msgid "Sequence"
msgstr "Нумерация"
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size
msgid "Size"
msgstr "Размер"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Size Based"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_order
msgid "Size Order"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Size Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_type
msgid "Size Type"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter_value
msgid "Size Value"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__size_parameter
#: selection:muk_autovacuum.rules,size_type:0
msgid "System Parameter"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time
msgid "Time"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,state:0
msgid "Time Based"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_field
msgid "Time Field"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Time Settings"
msgstr ""
#. module: muk_autovacuum
#: model:ir.model.fields,field_description:muk_autovacuum.field_muk_autovacuum_rules__time_type
msgid "Time Unit"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "Various fields may use Python code or Python expressions. The following variables can be used:"
msgstr "Различные поля могут использовать код Python или выражения Python. Могут использоваться следующие переменные:"
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Weeks"
msgstr ""
#. module: muk_autovacuum
#: selection:muk_autovacuum.rules,time_type:0
msgid "Years"
msgstr ""
#. module: muk_autovacuum
#: model_terms:ir.ui.view,arch_db:muk_autovacuum.view_autovacuum_rule_form
msgid "e.g. Delete Logs after 30 Days"
msgstr ""

View File

@ -0,0 +1,24 @@
###################################################################################
#
# Copyright (c) 2017-2019 MuK IT GmbH.
#
# This file is part of MuK Autovacuum
# (see https://mukit.at).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###################################################################################
from . import rules
from . import ir_autovacuum

View File

@ -0,0 +1,90 @@
###################################################################################
#
# Copyright (c) 2017-2019 MuK IT GmbH.
#
# This file is part of MuK Autovacuum
# (see https://mukit.at).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###################################################################################
import time
import logging
import datetime
import dateutil
from odoo import _
from odoo import models, api, fields
from odoo.tools.safe_eval import safe_eval
_logger = logging.getLogger(__name__)
_types = {
'days': lambda interval: datetime.timedelta(days=interval),
'years': lambda interval: datetime.timedelta(weeks=interval*52),
'hours': lambda interval: datetime.timedelta(hours=interval),
'weeks': lambda interval: datetime.timedelta(weeks=interval),
'months': lambda interval: datetime.timedelta(days=interval*30),
'minutes': lambda interval: datetime.timedelta(minutes=interval),
}
class AutoVacuum(models.AbstractModel):
_inherit = 'ir.autovacuum'
@api.model
def power_on(self, *args, **kwargs):
res = super(AutoVacuum, self).power_on(*args, **kwargs)
rules = self.env['muk_autovacuum.rules'].sudo().search([], order='sequence asc')
for rule in rules:
if rule.state in ['time', 'size', 'domain']:
model = self.env[rule.model.model].sudo()
records = self.env[rule.model.model]
if rule.state == 'time':
computed_time = datetime.datetime.utcnow() - _types[rule.time_type](rule.time)
domain = [(rule.time_field.name, '<', fields.Datetime.to_string(computed_time))]
if rule.protect_starred:
for field in rule.model.field_id:
if field.name in ['starred', 'favorite', 'is_starred', 'is_favorite']:
domain.append((field.name, '=', False))
if rule.only_inactive and "active" in rule.model.field_id.mapped("name"):
domain.append(('active', '=', False))
_logger.info(_("GC domain: %s"), domain)
records = model.with_context(active_test=False).search(domain)
elif rule.state == 'size':
size = rule.size if rule.size_type == 'fixed' else rule.size_parameter_value
count = model.with_context(active_test=False).search([], count=True)
if size and size > 0 and count > size:
limit = count - size
_logger.info(_("GC domain: [] order: %s limit: %s"), rule.size_order, limit)
records = model.with_context(active_test=False).search([], order=rule.size_order, limit=limit)
elif rule.state == 'domain':
_logger.info(_("GC domain: %s"), rule.domain)
domain = safe_eval(rule.domain or "[]", rules._get_eval_domain_context())
records = model.with_context(active_test=False).search(domain)
if rule.only_attachments:
attachments = self.env['ir.attachment'].sudo().search([
('res_model', '=', rule.model.model),
('res_id', 'in', records.mapped('id'))])
count = len(attachments)
attachments.unlink()
_logger.info(_("GC'd %s attachments from %s entries"), count, rule.model.model)
else:
count = len(records)
records.unlink()
_logger.info(_("GC'd %s %s records"), count, rule.model.model)
elif rule.state == 'code':
safe_eval(rule.code.strip(), rules._get_eval_code_context(rule), mode="exec")
return res

View File

@ -0,0 +1,330 @@
###################################################################################
#
# Copyright (c) 2017-2019 MuK IT GmbH.
#
# This file is part of MuK Autovacuum
# (see https://mukit.at).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###################################################################################
import time
import base64
import logging
import datetime
import dateutil
from pytz import timezone
from odoo import _
from odoo import models, api, fields
from odoo.exceptions import ValidationError, Warning
from odoo.tools import DEFAULT_SERVER_DATE_FORMAT
from odoo.tools import DEFAULT_SERVER_DATETIME_FORMAT
from odoo.tools.safe_eval import safe_eval, test_python_expr
_logger = logging.getLogger(__name__)
class AutoVacuumRules(models.Model):
_name = 'muk_autovacuum.rules'
_description = "Auto Vacuum Rules"
_order = "sequence asc"
#----------------------------------------------------------
# Defaults
#----------------------------------------------------------
def _default_sequence(self):
record = self.sudo().search([], order='sequence desc', limit=1)
if record.exists():
return record.sequence + 1
else:
return 1
#----------------------------------------------------------
# Database
#----------------------------------------------------------
name = fields.Char(
string='Name',
required=True)
active = fields.Boolean(
string='Active',
default=True)
state = fields.Selection(
selection=[
('time', 'Time Based'),
('size', 'Size Based'),
('domain', 'Domain Based'),
('code', 'Code Based')],
string='Rule Type',
default='time',
required=True)
sequence = fields.Integer(
string='Sequence',
default=lambda self: self._default_sequence(),
required=True)
model = fields.Many2one(
comodel_name='ir.model',
string="Model",
required=True,
ondelete='cascade',
help="Model on which the rule is applied.")
model_name = fields.Char(
related='model.model',
string="Model Name",
readonly=True,
store=True)
time_field = fields.Many2one(
comodel_name='ir.model.fields',
domain="[('model_id', '=', model), ('ttype', '=', 'datetime')]",
string='Time Field',
ondelete='cascade',
states={
'time': [('required', True)],
'size': [('invisible', True)],
'domain': [('invisible', True)],
'code': [('invisible', True)]})
time_type = fields.Selection(
selection=[
('minutes', 'Minutes'),
('hours', 'Hours'),
('days', 'Days'),
('weeks', 'Weeks'),
('months', 'Months'),
('years', 'Years')],
string='Time Unit',
default='months',
states={
'time': [('required', True)],
'size': [('invisible', True)],
'domain': [('invisible', True)],
'code': [('invisible', True)]})
time = fields.Integer(
string='Time',
default=1,
states={
'time': [('required', True)],
'size': [('invisible', True)],
'domain': [('invisible', True)],
'code': [('invisible', True)]},
help="Delete older data than x.")
size_type = fields.Selection(
selection=[
('fixed', 'Fixed Value'),
('parameter', 'System Parameter')],
string='Size Type',
default='fixed',
states={
'time': [('invisible', True)],
'size': [('required', True)],
'domain': [('invisible', True)],
'code': [('invisible', True)]})
size_parameter = fields.Many2one(
comodel_name='ir.config_parameter',
string='System Parameter',
ondelete='cascade',
states={
'time': [('invisible', True)],
'size': [('required', True)],
'domain': [('invisible', True)],
'code': [('invisible', True)]})
size_parameter_value = fields.Integer(
compute='_compute_size_parameter_value',
string='Size Value',
states={
'time': [('invisible', True)],
'size': [('readonly', True)],
'domain': [('invisible', True)],
'code': [('invisible', True)]},
help="Delete records with am index greater than x.")
size_order = fields.Char(
string='Size Order',
default='create_date desc',
states={
'time': [('invisible', True)],
'size': [('required', True)],
'domain': [('invisible', True)],
'code': [('invisible', True)]},
help="Order by which the index is defined.")
size = fields.Integer(
string='Size',
default=200,
states={
'time': [('invisible', True)],
'size': [('required', True)],
'domain': [('invisible', True)],
'code': [('invisible', True)]},
help="Delete records with am index greater than x.")
domain = fields.Char(
string='Domain',
states={
'time': [('invisible', True)],
'size': [('invisible', True)],
'domain': [('required', True)],
'code': [('invisible', True)]},
help="Delete all records which match the domain.")
code = fields.Text(
string='Code',
states={
'time': [('invisible', True)],
'size': [('invisible', True)],
'domain': [('invisible', True)] ,
'code': [('required', True)]},
default="# Enter Python code here. Help about Python expression is available in the help tab of this document.",
help="Code which will be executed during the clean up.")
protect_starred = fields.Boolean(
string='Protect Starred',
default=True,
states={
'time': [('invisible', False)],
'size': [('invisible', True)],
'domain': [('invisible', True)],
'code': [('invisible', True)]},
help="""Do not delete starred records.
Checks for the following fields:
- starred
- favorite
- is_starred
- is_favorite""")
only_inactive = fields.Boolean(
string='Only Archived',
default=False,
states={
'time': [('invisible', False)],
'size': [('invisible', True)],
'domain': [('invisible', True)],
'code': [('invisible', True)]},
help="Only delete archived records.")
only_attachments = fields.Boolean(
string='Only Attachments',
default=False,
states={
'time': [('invisible', False)],
'size': [('invisible', False)],
'domain': [('invisible', False)],
'code': [('invisible', True)]},
help="Only delete record attachments.")
#----------------------------------------------------------
# Functions
#----------------------------------------------------------
@api.model
def _get_eval_domain_context(self):
return {
'datetime': datetime,
'dateutil': dateutil,
'timezone': timezone,
'time': time,
'uid': self.env.uid,
'user': self.env.user
}
@api.model
def _get_eval_code_context(self, rule):
return {
'env': self.env,
'model': self.env[rule.model_name],
'uid': self.env.user.id,
'user': self.env.user,
'time': time,
'datetime': datetime,
'dateutil': dateutil,
'timezone': timezone,
'b64encode': base64.b64encode,
'b64decode': base64.b64decode,
'date_format': DEFAULT_SERVER_DATE_FORMAT,
'datetime_format': DEFAULT_SERVER_DATETIME_FORMAT,
'Warning': Warning,
'logger': logging.getLogger("%s (%s)" % (__name__, rule.name)),
}
#----------------------------------------------------------
# View
#----------------------------------------------------------
@api.onchange('model')
def _onchange_model(self):
field_domain = [
('model_id', '=', self.model.id),
('ttype', '=', 'datetime'),
('name', '=', 'create_date')]
model = self.env['ir.model.fields'].sudo()
self.time_field = model.search(field_domain, limit=1)
@api.model
def get_import_templates(self):
return [{
'label': _('Import Template for Auto Vacuum Rules'),
'template': '/muk_autovacuum/static/xls/muk_autovacuum_rules.xls'
}]
#----------------------------------------------------------
# Read
#----------------------------------------------------------
@api.depends('size_parameter')
def _compute_size_parameter_value(self):
for record in self:
try:
record.size_parameter_value = int(record.size_parameter.value)
except ValueError:
record.size_parameter_value = None
#----------------------------------------------------------
# Create, Update, Delete
#----------------------------------------------------------
@api.constrains('code')
def _check_code(self):
for record in self.sudo().filtered('code'):
message = test_python_expr(expr=record.code.strip(), mode="exec")
if message:
raise ValidationError(message)
@api.constrains(
'state', 'model', 'domain', 'code',
'time_field', 'time_type', 'time',
'size_type', 'size_parameter', 'size_order', 'size')
def _validate(self):
validators = {
'time': lambda rec: rec.time_field and rec.time_type and rec.time,
'size': lambda rec: rec.size_order and (rec.size_parameter or rec.size),
'domain': lambda rec: rec.domain,
'code': lambda rec: rec.code,
}
for record in self:
if not validators[record.state](record):
raise ValidationError(_("Rule validation has failed!"))

View File

@ -0,0 +1,3 @@
id,name,model_id/id,group_id/id,perm_read,perm_write,perm_create,perm_unlink
access_muk_autovacuum_rules_group_cron,muk_autovacuum_rules group_rules,model_muk_autovacuum_rules,base.group_system,1,1,1,1
1 id name model_id/id group_id/id perm_read perm_write perm_create perm_unlink
2 access_muk_autovacuum_rules_group_cron muk_autovacuum_rules group_rules model_muk_autovacuum_rules base.group_system 1 1 1 1

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.1 KiB

View File

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: Gravit.io -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" style="isolation:isolate" viewBox="0 0 250 250" width="250" height="250">
<defs>
<filter id="6h5zhs6EsmCdYqoDWpQdye92PuVIAFlM" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB">
<feOffset in="SourceGraphic" dx="0" dy="3" />
<feGaussianBlur stdDeviation="2.146804531419514" result="pf_100_offsetBlur" />
<feComposite in="SourceGraphic" in2="pf_100_offsetBlur" result="pf_100_inverse" operator="out" />
<feFlood flood-color="#FFFFFF" flood-opacity="0.5" result="pf_100_color" />
<feComposite in="pf_100_color" in2="pf_100_inverse" operator="in" result="pf_100_shadow" />
<feComposite in="pf_100_shadow" in2="SourceGraphic" operator="over" result="_out_uR74cLfpCM9hl8SPG68bUNeAvlHMO7D6" />
<feOffset in="_out_uR74cLfpCM9hl8SPG68bUNeAvlHMO7D6" dx="0" dy="-3" />
<feGaussianBlur stdDeviation="2.146804531419514" result="pf_101_offsetBlur" />
<feComposite in="_out_uR74cLfpCM9hl8SPG68bUNeAvlHMO7D6" in2="pf_101_offsetBlur" result="pf_101_inverse" operator="out" />
<feFlood flood-color="#000000" flood-opacity="0.5" result="pf_101_color" />
<feComposite in="pf_101_color" in2="pf_101_inverse" operator="in" result="pf_101_shadow" />
<feComposite in="pf_101_shadow" in2="_out_uR74cLfpCM9hl8SPG68bUNeAvlHMO7D6" operator="over" result="_out_Oq5ydn0Hq6rxbDiq5dZm4MzQyVH9DQcs" />
<feMerge>
<feMergeNode in="_out_Oq5ydn0Hq6rxbDiq5dZm4MzQyVH9DQcs" />
</feMerge>
</filter>
</defs>
<g filter="url(#6h5zhs6EsmCdYqoDWpQdye92PuVIAFlM)">
<path d="M 15 0 L 235 0 C 243.279 0 250 6.721 250 15 L 250 235 C 250 243.279 243.279 250 235 250 L 15 250 C 6.721 250 0 243.279 0 235 L 0 15 C 0 6.721 6.721 0 15 0 Z" style="stroke:none;fill:#243742;stroke-miterlimit:10;" />
</g>
<defs>
<filter id="3ix5SvWnYst0fHrBWMeRNC0a7ShQ7jfe" x="-200%" y="-200%" width="400%" height="400%" filterUnits="objectBoundingBox" color-interpolation-filters="sRGB">
<feGaussianBlur in="SourceGraphic" stdDeviation="2.146804531419514" />
<feOffset dx="-5" dy="5" result="pf_100_offsetBlur" />
<feFlood flood-color="#000000" flood-opacity="0.5" />
<feComposite in2="pf_100_offsetBlur" operator="in" result="pf_100_dropShadow" />
<feBlend in="SourceGraphic" in2="pf_100_dropShadow" mode="normal" />
</filter>
</defs>
<g filter="url(#3ix5SvWnYst0fHrBWMeRNC0a7ShQ7jfe)">
<path d=" M 114.779 103.281 L 114.779 172.271 C 114.779 174.388 113.063 176.104 110.946 176.104 L 103.281 176.104 C 101.164 176.104 99.448 174.388 99.448 172.271 L 99.448 103.281 C 99.448 101.164 101.164 99.448 103.281 99.448 L 110.946 99.448 C 113.063 99.448 114.779 101.164 114.779 103.281 Z M 146.719 99.448 L 139.054 99.448 C 136.937 99.448 135.221 101.164 135.221 103.281 L 135.221 172.271 C 135.221 174.388 136.937 176.104 139.054 176.104 L 146.719 176.104 C 148.836 176.104 150.552 174.388 150.552 172.271 L 150.552 103.281 C 150.552 101.164 148.836 99.448 146.719 99.448 Z M 188.88 68.786 C 193.113 68.786 196.545 72.218 196.545 76.452 L 196.545 80.284 C 196.545 82.401 194.829 84.117 192.712 84.117 L 186.324 84.117 L 186.324 191.435 C 186.324 199.902 179.461 206.766 170.993 206.766 L 79.007 206.766 C 70.539 206.766 63.676 199.902 63.676 191.435 L 63.676 84.117 L 57.288 84.117 C 55.171 84.117 53.455 82.401 53.455 80.284 L 53.455 76.452 C 53.455 72.218 56.887 68.786 61.12 68.786 L 84.887 68.786 L 95.752 50.677 C 98.523 46.06 103.514 43.234 108.899 43.234 L 141.101 43.234 C 146.487 43.234 151.477 46.06 154.248 50.677 L 165.113 68.786 L 188.88 68.786 Z M 102.766 68.786 L 147.234 68.786 L 141.66 59.496 C 141.313 58.918 140.69 58.565 140.016 58.565 L 109.984 58.565 C 109.311 58.565 108.687 58.918 108.341 59.496 L 102.766 68.786 Z M 170.993 84.117 L 79.007 84.117 L 79.007 189.518 C 79.007 190.577 79.865 191.435 80.923 191.435 L 169.077 191.435 C 170.135 191.435 170.993 190.577 170.993 189.518 L 170.993 84.117 Z " id="trash-alt-regular" fill="rgb(255,255,255)" />
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.2 KiB

View File

@ -0,0 +1,128 @@
<section class="oe_container">
<div class="oe_row oe_spaced">
<h2 class="oe_slogan">MuK Auto Vacuum</h2>
<h3 class="oe_slogan">Configure automatic garbage collection</h3>
<h4 class="oe_slogan" style="font-size: 23px;">MuK IT GmbH -
www.mukit.at</h4>
<div class="oe_demo oe_screenshot"
style="max-width: 84%; margin: 16px 8%;">
<img src="screenshot.png">
</div>
</div>
</section>
<section class="oe_container">
<div class="oe_row oe_spaced">
<div class="text-justify" style="max-width: 84%; margin: 16px 8%;">
<h3 class="oe_slogan">Overview</h3>
<p class="oe_mt32">Allows the administrator to create rules to
automatically garbage collect a certain model. Every rule can have a
different time interval additional constraints. An extra constraint
can be for example to only delete inactive records.</p>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<div class="oe_row oe_spaced">
<h3 class="oe_slogan">Our Services</h3>
<div
style="display: flex; padding-top: 20px; justify-content: space-between;">
<div style="flex-basis: 18%;">
<a href="https://mukit.at/r/MQ5" target="_blank">
<div
style="width: 75px; height: 75px; border-radius: 100%; margin: auto;">
<img src="service_implementation.png"
style="width: 100%; border-radius: 100%;">
</div>
<h3 class="oe_slogan"
style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;">
Odoo <br>Implementation
</h3>
</a>
</div>
<div style="flex-basis: 18%;">
<a href="https://mukit.at/r/u7c" target="_blank">
<div
style="width: 75px; height: 75px; border-radius: 100%; margin: auto;">
<img src="service_integration.png"
style="width: 100%; border-radius: 100%;">
</div>
<h3 class="oe_slogan"
style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;">
Odoo <br>Integration
</h3>
</a>
</div>
<div style="flex-basis: 18%;">
<a href="https://mukit.at/r/xDJ" target="_blank">
<div
style="width: 75px; height: 75px; border-radius: 100%; margin: auto;">
<img src="service_customization.png"
style="width: 100%; border-radius: 100%;">
</div>
<h3 class="oe_slogan"
style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;">
Odoo <br>Customization
</h3>
</a>
</div>
<div style="flex-basis: 18%;">
<a href=" https://mukit.at/r/J3A" target="_blank">
<div
style="width: 75px; height: 75px; border-radius: 100%; margin: auto;">
<img src="service_development.png"
style="width: 100%; border-radius: 100%;">
</div>
<h3 class="oe_slogan"
style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;">
Odoo <br>Development
</h3>
</a>
</div>
<div style="flex-basis: 18%;">
<a href=" https://mukit.at/r/R1v" target="_blank">
<div
style="width: 75px; height: 75px; border-radius: 100%; margin: auto;">
<img src="service_support.png"
style="width: 100%; border-radius: 100%;">
</div>
<h3 class="oe_slogan"
style="text-align: center; font-size: 14px; width: 100%; margin: 0; margin-top: 14px; color: #000 !important; margin-top: 5px; opacity: 1 !important; line-height: 17px;">
Odoo <br>Support
</h3>
</a>
</div>
</div>
</div>
</section>
<section class="oe_container" style="padding: 32px 0;">
<div class="oe_row oe_spaced" style="margin: auto;">
<div class="oe_demo oe_picture oe_screenshot">
<a href="https://mukit.at/r/SgN" target="_blank"> <img src="preview.png">
</a>
</div>
</div>
</section>
<section class="oe_container oe_dark">
<h3 class="oe_slogan">Help and Support</h3>
<h5 class="oe_slogan" style="font-size: 20px;">Feel free to
contact us, if you need any help with your Odoo integration or
addiontal features.</h5>
<div class="oe_slogan">
<a class="btn btn-primary btn-lg mt8" href="https://mukit.at" target="_blank">
<i class="fa fa-globe"></i> Website
</a>
<a class="btn btn-primary btn-lg mt8" href="mailto:sale@mukit.at">
<i class="fa fa-envelope"></i> Contact Us
</a>
<a class="btn btn-primary btn-lg mt8" href="https://github.com/muk-it" target="_blank">
<i class="fa fa-github"></i> Issues
</a>
</div>
<img src="logo.png"
style="width: 200px; margin-bottom: 20px; display: block;"
class="mx-auto center-block">
</section>

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 28 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

View File

@ -0,0 +1,23 @@
###################################################################################
#
# Copyright (c) 2017-2019 MuK IT GmbH.
#
# This file is part of MuK Autovacuum
# (see https://mukit.at).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###################################################################################
from . import test_autovacuum

View File

@ -0,0 +1,99 @@
###################################################################################
#
# Copyright (c) 2017-2019 MuK IT GmbH.
#
# This file is part of MuK Autovacuum
# (see https://mukit.at).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###################################################################################
import logging
import datetime
from odoo.tests import common
_logger = logging.getLogger(__name__)
class AutoVacuumTestCase(common.TransactionCase):
def setUp(self):
super(AutoVacuumTestCase, self).setUp()
self.logs = self.env['ir.logging']
self.rules = self.env['muk_autovacuum.rules']
self.model_model = self.env['ir.model']
self.model_fields = self.env['ir.model.fields']
self.model_logs = self.model_model.search([('model', '=', 'ir.logging')], limit=1)
time_field_domain = [
('model_id', '=', self.model_logs.id),
('ttype', '=', 'datetime'),
('name', '=', 'create_date')]
self.time_field_logs = self.model_fields.search(time_field_domain, limit=1)
def test_autovacuum_time(self):
self.create_logs()
self.rules.create({
'name': "Delete Logs after 1 Minute",
'state': 'time',
'model': self.model_logs.id,
'time_field': self.time_field_logs.id,
'time_type': 'minutes',
'time': 1})
self.run_autovacuum()
def test_autovacuum_size(self):
self.create_logs()
self.rules.create({
'name': "Delete Logs Count > 1",
'state': 'size',
'model': self.model_logs.id,
'size': 1,
'size_order': "id desc",
'size_type': 'fixed'})
self.run_autovacuum()
def test_autovacuum_domain(self):
self.create_logs()
self.rules.create({
'name': "Delete Logs with Domain",
'state': 'domain',
'model': self.model_logs.id,
'domain': "[]"})
self.run_autovacuum()
def create_logs(self):
ids = []
time = datetime.datetime.utcnow()
for index in range(0, 10):
log = self.logs.create({
'create_date': time - datetime.timedelta(days=index),
'create_uid': self.env.user.id,
'name': "Test %s" % index,
'type': 'server',
'dbname': self.env.cr.dbname,
'level': "INFO",
'message': "TEST",
'path': "PATH",
'func': "TEST",
'line': 1})
ids.append(log.id)
return ids
def run_autovacuum(self):
count_before = self.env['ir.logging'].search([], count=True)
self.env['ir.cron'].search([('model_id', '=', 'ir.autovacuum')]).ir_actions_server_id.run()
count_after = self.env['ir.logging'].search([], count=True)
self.assertTrue(count_before > count_after)

View File

@ -0,0 +1,161 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2017-2019 MuK IT GmbH.
This file is part of MuK Autovacuum
(see https://mukit.at).
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<record id="view_autovacuum_rule_search" model="ir.ui.view">
<field name="name">muk_autovacuum_rules.search</field>
<field name="model">muk_autovacuum.rules</field>
<field name="arch" type="xml">
<search string="Auto Vacuum Rules">
<field name="name" filter_domain="[('name', 'ilike', self)]" />
<field name="model" />
<field name="state" />
<field name="active" />
<filter string="All" name="all" domain="['|', ('active', '=', False), ('active', '=', True)]" />
<group expand="0" name="group_by" string="Group By">
<filter name="group_by_model" string="Model" domain="[]" context="{'group_by': 'model'}"/>
</group>
</search>
</field>
</record>
<record id="view_autovacuum_rule_tree" model="ir.ui.view">
<field name="name">muk_autovacuum_rules.tree</field>
<field name="model">muk_autovacuum.rules</field>
<field name="arch" type="xml">
<tree string="Auto Vacuum Rules" decoration-muted="(not active)">
<field name="sequence" widget="handle"/>
<field name="name"/>
<field name="model"/>
<field name="state"/>
<field name="active"/>
</tree>
</field>
</record>
<record id="view_autovacuum_rule_form" model="ir.ui.view">
<field name="name">muk_autovacuum_rules.form</field>
<field name="model">muk_autovacuum.rules</field>
<field name="arch" type="xml">
<form string="Auto Vacuum Rules">
<sheet>
<div class="oe_button_box" name="button_box">
<button name="toggle_active" type="object" class="oe_stat_button" icon="fa-bell">
<field name="active" widget="boolean_button"/>
</button>
</div>
<div class="oe_title">
<label for="name" class="oe_edit_only"/>
<h1>
<field name="name" placeholder="e.g. Delete Logs after 30 Days"/>
</h1>
</div>
<group>
<group>
<field name="sequence"/>
<field name="model"/>
<field name="model_name" invisible="1"/>
<field name="state"/>
</group>
<group>
<field name="protect_starred"/>
<field name="only_inactive"/>
<field name="only_attachments"/>
</group>
</group>
<notebook>
<page string="Time Settings" name='time' autofocus="autofocus"
attrs="{'invisible': [('state', '!=', 'time')]}">
<group>
<group>
<field name="time_field"/>
</group>
<group>
<field name="time_type"/>
<field name="time"/>
</group>
</group>
</page>
<page string="Size Settings" name='size' autofocus="autofocus"
attrs="{'invisible': [('state', '!=', 'size')]}">
<group>
<group>
<field name="size_type"/>
</group>
<group>
<field name="size_parameter"
attrs="{'invisible': [('size_type', '!=', 'parameter')]}"/>
<field name="size_parameter_value"
attrs="{'invisible': [('size_type', '!=', 'parameter')]}"/>
<field name="size"
attrs="{'invisible': [('size_type', '!=', 'fixed')]}"/>
<field name="size_order"/>
</group>
</group>
</page>
<page string="Domain Settings" name='domain' autofocus="autofocus"
attrs="{'invisible': [('state', '!=', 'domain')]}">
<field name="domain" widget="domain" options="{'model': 'model_name'}" />
</page>
<page string="Code Settings" name='code' autofocus="autofocus"
attrs="{'invisible': [('state', '!=', 'code')]}">
<field name="code" widget="ace" options="{'mode': 'python'}"
placeholder="Enter Python code here. Help about Python expression is available in the help tab of this document."/>
</page>
<page string="Help" attrs="{'invisible': [('state', '!=', 'code')]}">
<group>
<div style="margin-top: 4px;">
<h3>Help with Python expressions</h3>
<p>Various fields may use Python code or Python expressions. The following variables can be used:</p>
<ul>
<li><code>uid</code>, <code>user</code>: User on which the rule is triggered</li>
<li><code>env</code>: Odoo Environment on which the rule is triggered</li>
<li><code>model</code>: Odoo Model of the record on which the rule is triggered</li>
<li><code>b64encode</code>, <code>b64decode</code>: Base64 converter</li>
<li><code>time</code>, <code>datetime</code>, <code>dateutil</code>, <code>timezone</code>: useful Python libraries</li>
<li><code>date_format</code>, <code>datetime_format</code>: server date and time formats</li>
<li><code>logger.info(message)</code>: Python logging framework</li>
<li><code>Warning</code>: Warning Exception to use with <code>raise</code></li>
</ul>
</div>
</group>
</page>
</notebook>
</sheet>
</form>
</field>
</record>
<record id="action_autovacuum_rule" model="ir.actions.act_window">
<field name="name">Auto Vacuum Rules</field>
<field name="res_model">muk_autovacuum.rules</field>
<field name="view_mode">tree,form</field>
<field name="context">{'search_default_all': 1}</field>
</record>
<menuitem id="menu_autovacuum_rules" name="Auto Vacuum Rules"
parent="base.menu_automation" action="action_autovacuum_rule"/>
</odoo>

165
odex-event/muk_dms/LICENSE Normal file
View File

@ -0,0 +1,165 @@
GNU LESSER GENERAL PUBLIC LICENSE
Version 3, 29 June 2007
Copyright (C) 2007 Free Software Foundation, Inc. <https://fsf.org/>
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
This version of the GNU Lesser General Public License incorporates
the terms and conditions of version 3 of the GNU General Public
License, supplemented by the additional permissions listed below.
0. Additional Definitions.
As used herein, "this License" refers to version 3 of the GNU Lesser
General Public License, and the "GNU GPL" refers to version 3 of the GNU
General Public License.
"The Library" refers to a covered work governed by this License,
other than an Application or a Combined Work as defined below.
An "Application" is any work that makes use of an interface provided
by the Library, but which is not otherwise based on the Library.
Defining a subclass of a class defined by the Library is deemed a mode
of using an interface provided by the Library.
A "Combined Work" is a work produced by combining or linking an
Application with the Library. The particular version of the Library
with which the Combined Work was made is also called the "Linked
Version".
The "Minimal Corresponding Source" for a Combined Work means the
Corresponding Source for the Combined Work, excluding any source code
for portions of the Combined Work that, considered in isolation, are
based on the Application, and not on the Linked Version.
The "Corresponding Application Code" for a Combined Work means the
object code and/or source code for the Application, including any data
and utility programs needed for reproducing the Combined Work from the
Application, but excluding the System Libraries of the Combined Work.
1. Exception to Section 3 of the GNU GPL.
You may convey a covered work under sections 3 and 4 of this License
without being bound by section 3 of the GNU GPL.
2. Conveying Modified Versions.
If you modify a copy of the Library, and, in your modifications, a
facility refers to a function or data to be supplied by an Application
that uses the facility (other than as an argument passed when the
facility is invoked), then you may convey a copy of the modified
version:
a) under this License, provided that you make a good faith effort to
ensure that, in the event an Application does not supply the
function or data, the facility still operates, and performs
whatever part of its purpose remains meaningful, or
b) under the GNU GPL, with none of the additional permissions of
this License applicable to that copy.
3. Object Code Incorporating Material from Library Header Files.
The object code form of an Application may incorporate material from
a header file that is part of the Library. You may convey such object
code under terms of your choice, provided that, if the incorporated
material is not limited to numerical parameters, data structure
layouts and accessors, or small macros, inline functions and templates
(ten or fewer lines in length), you do both of the following:
a) Give prominent notice with each copy of the object code that the
Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the object code with a copy of the GNU GPL and this license
document.
4. Combined Works.
You may convey a Combined Work under terms of your choice that,
taken together, effectively do not restrict modification of the
portions of the Library contained in the Combined Work and reverse
engineering for debugging such modifications, if you also do each of
the following:
a) Give prominent notice with each copy of the Combined Work that
the Library is used in it and that the Library and its use are
covered by this License.
b) Accompany the Combined Work with a copy of the GNU GPL and this license
document.
c) For a Combined Work that displays copyright notices during
execution, include the copyright notice for the Library among
these notices, as well as a reference directing the user to the
copies of the GNU GPL and this license document.
d) Do one of the following:
0) Convey the Minimal Corresponding Source under the terms of this
License, and the Corresponding Application Code in a form
suitable for, and under terms that permit, the user to
recombine or relink the Application with a modified version of
the Linked Version to produce a modified Combined Work, in the
manner specified by section 6 of the GNU GPL for conveying
Corresponding Source.
1) Use a suitable shared library mechanism for linking with the
Library. A suitable mechanism is one that (a) uses at run time
a copy of the Library already present on the user's computer
system, and (b) will operate properly with a modified version
of the Library that is interface-compatible with the Linked
Version.
e) Provide Installation Information, but only if you would otherwise
be required to provide such information under section 6 of the
GNU GPL, and only to the extent that such information is
necessary to install and execute a modified version of the
Combined Work produced by recombining or relinking the
Application with a modified version of the Linked Version. (If
you use option 4d0, the Installation Information must accompany
the Minimal Corresponding Source and Corresponding Application
Code. If you use option 4d1, you must provide the Installation
Information in the manner specified by section 6 of the GNU GPL
for conveying Corresponding Source.)
5. Combined Libraries.
You may place library facilities that are a work based on the
Library side by side in a single library together with other library
facilities that are not Applications and are not covered by this
License, and convey such a combined library under terms of your
choice, if you do both of the following:
a) Accompany the combined library with a copy of the same work based
on the Library, uncombined with any other library facilities,
conveyed under the terms of this License.
b) Give prominent notice with the combined library that part of it
is a work based on the Library, and explaining where to find the
accompanying uncombined form of the same work.
6. Revised Versions of the GNU Lesser General Public License.
The Free Software Foundation may publish revised and/or new versions
of the GNU Lesser General Public License from time to time. Such new
versions will be similar in spirit to the present version, but may
differ in detail to address new problems or concerns.
Each version is given a distinguishing version number. If the
Library as you received it specifies that a certain numbered version
of the GNU Lesser General Public License "or any later version"
applies to it, you have the option of following the terms and
conditions either of that published version or of any later version
published by the Free Software Foundation. If the Library as you
received it does not specify a version number of the GNU Lesser
General Public License, you may choose any version of the GNU Lesser
General Public License ever published by the Free Software Foundation.
If the Library as you received it specifies that a proxy can decide
whether future versions of the GNU Lesser General Public License shall
apply, that proxy's public statement of acceptance of any version is
permanent authorization for you to choose that version for the
Library.

View File

@ -0,0 +1,123 @@
==============================
MuK Document Management System
==============================
MuK Documents is a module to create, manage and view files directly within Odoo.
In addition to views for files and folders, it offers its own all in one view
to make working with documents easier. This module is only the basis for an
entire ecosystem of apps that extend and seamlessly integrate with the document
management system.
Installation
============
To install this module, you need to:
Download the module and add it to your Odoo addons folder. Afterward, log on to
your Odoo server and go to the Apps menu. Trigger the debug mode and update the
list by clicking on the "Update Apps List" link. Now install the module by
clicking on the install button.
Another way to install this module is via the package management for Python
(`PyPI <https://pypi.org/project/pip/>`_).
To install our modules using the package manager make sure
`odoo-autodiscover <https://pypi.org/project/odoo-autodiscover/>`_ is installed
correctly. Then open a console and install the module by entering the following
command:
``pip install --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>``
The module name consists of the Odoo version and the module name, where
underscores are replaced by a dash.
**Module:**
``odoo<version>-addon-<module_name>``
**Example:**
``sudo -H pip3 install --extra-index-url https://nexus.mukit.at/repository/odoo/simple odoo11-addon-muk-utils``
Once the installation has been successfully completed, the app is already in the
correct folder. Log on to your Odoo server and go to the Apps menu. Trigger the
debug mode and update the list by clicking on the "Update Apps List" link. Now
install the module by clicking on the install button.
The biggest advantage of this variant is that you can now also update the app
using the "pip" command. To do this, enter the following command in your console:
``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>``
When the process is finished, restart your server and update the application in
Odoo. The steps are the same as for the installation only the button has changed
from "Install" to "Upgrade".
You can also view available Apps directly in our `repository <https://nexus.mukit.at/#browse/browse:odoo>`_
and find a more detailed installation guide on our `website <https://mukit.at/page/open-source>`_.
For modules licensed under OPL-1, you will receive access data when you purchase
the module. If the modules were not purchased directly from
`MuK IT <https://www.mukit.at/>`_ please contact our support (support@mukit.at)
with a confirmation of purchase to receive the corresponding access data.
Upgrade
============
To upgrade this module, you need to:
Download the module and add it to your Odoo addons folder. Restart the server
and log on to your Odoo server. Select the Apps menu and upgrade the module by
clicking on the upgrade button.
If you installed the module using the "pip" command, you can also update the
module in the same way. Just type the following command into the console:
``pip install --upgrade --extra-index-url https://nexus.mukit.at/repository/odoo/simple <module>``
When the process is finished, restart your server and update the application in
Odoo, just like you would normally.
Configuration
=============
To configure this module, you need to:
#. Go to *Documents -> Configuration -> Storages*.
#. Create a new document setting.
#. Afterwards go to *Documents -> Directories*.
#. Create a new directory, mark it as root and select the previously created setting.
Usage
=============
The best way to manage the documents is to switch to the Documents view. Existing
documents can be managed there and new documents can be created.
Credits
=======
Contributors
------------
* Mathias Markl <mathias.markl@mukit.at>
Images
------------
Some pictures are based on or inspired by:
* `Roundicons <https://www.flaticon.com/authors/roundicons>`_
* `Smashicons <https://www.flaticon.com/authors/smashicons>`_
Author & Maintainer
-------------------
This module is maintained by the `MuK IT GmbH <https://www.mukit.at/>`_.
MuK IT is an Austrian company specialized in customizing and extending Odoo.
We develop custom solutions for your individual needs to help you focus on
your strength and expertise to grow your business.
If you want to get in touch please contact us via mail
(sale@mukit.at) or visit our website (https://mukit.at).

View File

@ -0,0 +1,24 @@
###################################################################################
#
# Copyright (c) 2017-2019 MuK IT GmbH.
#
# This file is part of MuK Documents
# (see https://mukit.at).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###################################################################################
from . import models
from . import controllers

View File

@ -0,0 +1,73 @@
###################################################################################
#
# Copyright (c) 2017-2019 MuK IT GmbH.
#
# This file is part of MuK Documents
# (see https://mukit.at).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###################################################################################
{
"name": "MuK Documents",
"summary": """Document Management System""",
"version": '12.0.3.0.12',
"category": 'Document Management',
"license": "LGPL-3",
"website": "http://www.mukit.at",
'live_test_url': 'https://mukit.at/r/SgN',
"author": "MuK IT",
"contributors": [
"Mathias Markl <mathias.markl@mukit.at>",
],
"depends": [
"muk_security",
"muk_web_searchpanel",
],
"data": [
"security/security.xml",
"security/ir.model.access.csv",
"actions/file.xml",
"template/assets.xml",
"template/onboarding.xml",
"views/menu.xml",
"views/tag.xml",
"views/category.xml",
"views/file.xml",
"views/directory.xml",
"views/storage.xml",
"views/res_config_settings.xml",
],
"demo": [
"demo/res_users.xml",
"demo/category.xml",
"demo/tag.xml",
"demo/storage.xml",
"demo/directory.xml",
"demo/file.xml",
],
"qweb": [
"static/src/xml/*.xml",
],
"images": [
'static/description/banner.png'
],
"external_dependencies": {
"python": [],
"bin": [],
},
"application": True,
"installable": True,
}

View File

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
Copyright (c) 2017-2019 MuK IT GmbH.
This file is part of MuK Documents
(see https://mukit.at).
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>.
-->
<odoo>
<record id="action_dms_attachment_migrate" model="ir.actions.server">
<field name="name">Migrate</field>
<field name="model_id" ref="model_muk_dms_file" />
<field name="binding_model_id" ref="muk_dms.model_muk_dms_file" />
<field name="state">code</field>
<field name="code">records.action_migrate()</field>
</record>
</odoo>

View File

@ -0,0 +1,24 @@
###################################################################################
#
# Copyright (c) 2017-2019 MuK IT GmbH.
#
# This file is part of MuK Documents
# (see https://mukit.at).
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
###################################################################################
from . import backend
from . import onboarding

Some files were not shown because too many files have changed in this diff Show More