merge upstream
This commit is contained in:
commit
176a6aad46
|
@ -43,7 +43,6 @@ If you need to manage your meetings, you should install the CRM module.
|
|||
'security/ir.model.access.csv',
|
||||
'security/calendar_security.xml',
|
||||
'calendar_view.xml',
|
||||
'contacts_view.xml',
|
||||
'calendar_data.xml',
|
||||
'views/calendar.xml',
|
||||
],
|
||||
|
|
|
@ -1,31 +0,0 @@
|
|||
<?xml version="1.0"?>
|
||||
<openerp>
|
||||
<data>
|
||||
<record id="view_calendar_contacts" model="ir.ui.view">
|
||||
<field name="name">My Coworkers</field>
|
||||
<field name="model">calendar.contacts</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree string="contacts" editable="bottom">
|
||||
<field name="partner_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
<record id="action_calendar_contacts" model="ir.actions.act_window">
|
||||
<field name="name">Calendar Contacts</field>
|
||||
<field name="res_model">calendar.contacts</field>
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="domain">[('user_id','=',uid)]</field>
|
||||
<field name="view_id" ref="view_calendar_contacts" />
|
||||
<field name="help" type="html">
|
||||
<p class="oe_view_nocontent_create">
|
||||
Click on "<b>create</b>" to select colleagues you want to see meetings.
|
||||
</p><p>
|
||||
Your colleagues will appear in the right list to see them in the calendar view. You will easily manage collaboration and meeting with them.
|
||||
</p>
|
||||
</field>
|
||||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
|
@ -72,3 +72,13 @@ span.no-wrap {
|
|||
.cal_tab {
|
||||
margin: 20 0 20 0;
|
||||
}
|
||||
.openerp .oe_remove_follower {
|
||||
cursor: pointer;
|
||||
position: absolute;
|
||||
right: 0px;
|
||||
line-height: 20px;
|
||||
color: #D3D3D3;
|
||||
}
|
||||
.openerp .oe_add_input_box > div > input{
|
||||
width: 200px;
|
||||
}
|
|
@ -1,9 +1,136 @@
|
|||
openerp.calendar = function(instance) {
|
||||
var _t = instance.web._t;
|
||||
var _t = instance.web._t,
|
||||
_lt = instance.web._lt;
|
||||
var QWeb = instance.web.qweb;
|
||||
|
||||
instance.calendar = {};
|
||||
|
||||
function reload_favorite_list(result) {
|
||||
var self = current = result;
|
||||
if (result.view) {
|
||||
self = result.view;
|
||||
}
|
||||
new instance.web.Model("res.users").query(["partner_id"]).filter([["id", "=",self.dataset.context.uid]]).first()
|
||||
.done(
|
||||
function(result) {
|
||||
var sidebar_items = {};
|
||||
var filter_value = result.partner_id[0];
|
||||
var filter_item = {
|
||||
value: filter_value,
|
||||
label: result.partner_id[1] + _lt(" [Me]"),
|
||||
color: self.get_color(filter_value),
|
||||
avatar_model: self.avatar_model,
|
||||
is_checked: true,
|
||||
is_remove: false,
|
||||
};
|
||||
|
||||
sidebar_items[0] = filter_item ;
|
||||
filter_item = {
|
||||
value: -1,
|
||||
label: _lt("Everybody's calendars"),
|
||||
color: self.get_color(-1),
|
||||
avatar_model: self.avatar_model,
|
||||
is_checked: false
|
||||
};
|
||||
sidebar_items[-1] = filter_item ;
|
||||
//Get my coworkers/contacts
|
||||
new instance.web.Model("calendar.contacts").query(["partner_id"]).filter([["user_id", "=",self.dataset.context.uid]]).all().then(function(result) {
|
||||
_.each(result, function(item) {
|
||||
filter_value = item.partner_id[0];
|
||||
filter_item = {
|
||||
value: filter_value,
|
||||
label: item.partner_id[1],
|
||||
color: self.get_color(filter_value),
|
||||
avatar_model: self.avatar_model,
|
||||
is_checked: true
|
||||
};
|
||||
sidebar_items[filter_value] = filter_item ;
|
||||
});
|
||||
self.all_filters = sidebar_items;
|
||||
self.now_filter_ids = $.map(self.all_filters, function(o) { return o.value; });
|
||||
|
||||
self.sidebar.filter.events_loaded(self.all_filters);
|
||||
self.sidebar.filter.set_filters();
|
||||
self.sidebar.filter.set_distroy_filters();
|
||||
self.sidebar.filter.addInputBox();
|
||||
self.sidebar.filter.destroy_filter();
|
||||
}).done(function () {
|
||||
self.$calendar.fullCalendar('refetchEvents');
|
||||
if (current.ir_model_m2o) {
|
||||
current.ir_model_m2o.set_value(false);
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
instance.web_calendar.CalendarView.include({
|
||||
extraSideBar: function(){
|
||||
this._super();
|
||||
if (this.useContacts){
|
||||
new reload_favorite_list(this);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
instance.web_calendar.SidebarFilter.include({
|
||||
set_distroy_filters: function() {
|
||||
var self = this;
|
||||
// When mouse-enter the favorite list it will show the 'X' for removing partner from the favorite list.
|
||||
if (self.view.useContacts){
|
||||
self.$('.oe_calendar_all_responsibles').on('mouseenter mouseleave', function(e) {
|
||||
self.$('.oe_remove_follower').toggleClass('hidden', e.type == 'mouseleave');
|
||||
});
|
||||
}
|
||||
},
|
||||
addInputBox: function() {
|
||||
var self = this;
|
||||
if (this.dfm)
|
||||
return;
|
||||
this.dfm = new instance.web.form.DefaultFieldManager(self);
|
||||
this.dfm.extend_field_desc({
|
||||
partner_id: {
|
||||
relation: "res.partner",
|
||||
},
|
||||
});
|
||||
this.ir_model_m2o = new instance.web.form.FieldMany2One(self.dfm, {
|
||||
attrs: {
|
||||
class: 'oe_add_input_box',
|
||||
name: "partner_id",
|
||||
type: "many2one",
|
||||
options: '{"no_open": True}',
|
||||
placeholder: _t("Select Favorite Calendar"),
|
||||
},
|
||||
});
|
||||
this.ir_model_m2o.insertAfter($('div.oe_calendar_filter'));
|
||||
this.ir_model_m2o.on('change:value', self, function() {
|
||||
self.add_filter();
|
||||
});
|
||||
},
|
||||
add_filter: function() {
|
||||
var self = this;
|
||||
new instance.web.Model("res.users").query(["partner_id"]).filter([["id", "=",this.view.dataset.context.uid]]).first().done(function(result){
|
||||
$.map(self.ir_model_m2o.display_value, function(element,index) {
|
||||
if (result.partner_id[0] != index){
|
||||
self.ds_message = new instance.web.DataSetSearch(self, 'calendar.contacts');
|
||||
self.ds_message.call("create", [{'partner_id': index}]);
|
||||
}
|
||||
});
|
||||
});
|
||||
new reload_favorite_list(this);
|
||||
},
|
||||
destroy_filter: function(e) {
|
||||
var self= this;
|
||||
this.$(".oe_remove_follower").on('click', function(e) {
|
||||
self.ds_message = new instance.web.DataSetSearch(self, 'calendar.contacts');
|
||||
if (! confirm(_t("Do you really want to delete this filter from favorite?"))) { return false; }
|
||||
var id = $(e.currentTarget)[0].dataset.id;
|
||||
self.ds_message.call('search', [[['partner_id', '=', parseInt(id)]]]).then(function(record){
|
||||
return self.ds_message.unlink(record);
|
||||
}).done(function() {
|
||||
new reload_favorite_list(self);
|
||||
});
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
instance.web.WebClient = instance.web.WebClient.extend({
|
||||
|
||||
|
|
|
@ -73,4 +73,13 @@
|
|||
</div>
|
||||
</div>
|
||||
</t>
|
||||
|
||||
<t t-extend="CalendarView.sidebar.responsible">
|
||||
<t t-jquery="span#color_filter" t-operation="after">
|
||||
<t t-if="(filters_value.value != -1) && (filters_value.is_remove != false)">
|
||||
<span class="oe_remove_follower oe_e hidden" title="Remove this favorite from the list" t-att-data-id="filters_value.value">X</span>
|
||||
</t>
|
||||
</t>
|
||||
</t>
|
||||
|
||||
</template>
|
||||
|
|
|
@ -935,8 +935,10 @@ class crm_lead(format_address, osv.osv):
|
|||
|
||||
def message_get_reply_to(self, cr, uid, ids, context=None):
|
||||
""" Override to get the reply_to of the parent project. """
|
||||
return [lead.section_id.message_get_reply_to()[0] if lead.section_id else False
|
||||
for lead in self.browse(cr, SUPERUSER_ID, ids, context=context)]
|
||||
leads = self.browse(cr, SUPERUSER_ID, ids, context=context)
|
||||
section_ids = set([lead.section_id.id for lead in leads if lead.section_id])
|
||||
aliases = self.pool['crm.case.section'].message_get_reply_to(cr, uid, list(section_ids), context=context)
|
||||
return dict((lead.id, aliases.get(lead.section_id and lead.section_id.id or 0, False)) for lead in leads)
|
||||
|
||||
def get_formview_id(self, cr, uid, id, context=None):
|
||||
obj = self.browse(cr, uid, id, context=context)
|
||||
|
|
|
@ -237,8 +237,8 @@ class test_message_compose(TestMail):
|
|||
email_template.send_mail(cr, uid, email_template_id, self.group_pigs_id, force_send=True, context=context)
|
||||
sent_emails = self._build_email_kwargs_list
|
||||
email_to_lst = [
|
||||
['b@b.b', 'c@c.c'], ['Administrator <admin@yourcompany.example.com>'],
|
||||
['Raoul Grosbedon <raoul@raoul.fr>'], ['Bert Tartignole <bert@bert.fr>']]
|
||||
['b@b.b', 'c@c.c'], ['"Administrator" <admin@yourcompany.example.com>'],
|
||||
['"Raoul Grosbedon" <raoul@raoul.fr>'], ['"Bert Tartignole" <bert@bert.fr>']]
|
||||
self.assertEqual(len(sent_emails), 4, 'email_template: send_mail: 3 valid email recipients + email_to -> should send 4 emails')
|
||||
for email in sent_emails:
|
||||
self.assertIn(email['email_to'], email_to_lst, 'email_template: send_mail: wrong email_recipients')
|
||||
|
|
|
@ -20,6 +20,8 @@
|
|||
##############################################################################
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from openerp import SUPERUSER_ID
|
||||
from openerp.osv import fields, osv
|
||||
from openerp.tools.translate import _
|
||||
|
||||
|
@ -357,6 +359,13 @@ class hr_applicant(osv.Model):
|
|||
action['domain'] = str(['&', ('res_model', '=', self._name), ('res_id', 'in', ids)])
|
||||
return action
|
||||
|
||||
def message_get_reply_to(self, cr, uid, ids, context=None):
|
||||
""" Override to get the reply_to of the parent project. """
|
||||
applicants = self.browse(cr, SUPERUSER_ID, ids, context=context)
|
||||
job_ids = set([applicant.job_id.id for applicant in applicants if applicant.job_id])
|
||||
aliases = self.pool['project.project'].message_get_reply_to(cr, uid, list(job_ids), context=context)
|
||||
return dict((applicant.id, aliases.get(applicant.job_id and applicant.job_id.id or 0, False)) for applicant in applicants)
|
||||
|
||||
def message_get_suggested_recipients(self, cr, uid, ids, context=None):
|
||||
recipients = super(hr_applicant, self).message_get_suggested_recipients(cr, uid, ids, context=context)
|
||||
for applicant in self.browse(cr, uid, ids, context=context):
|
||||
|
|
|
@ -279,25 +279,25 @@
|
|||
|
||||
<!-- ADQUISICIONES INTRACOMUNITARIAS DE BIENES CORRIENTES-->
|
||||
<record id="iva_ded_30" model="account.tax.code.template">
|
||||
<field name="name">Base adquisiciones intracomunitarias bienes y servicios corrientes</field>
|
||||
<field name="name">Base adquisiciones intracomunitarias bienes y serv. corrientes</field>
|
||||
<field name="code">[30]</field>
|
||||
<field name="parent_id" ref="iva_ded_base_total"/>
|
||||
<field name="sign">1.0</field>
|
||||
</record>
|
||||
<record id="iva_ded_30_4" model="account.tax.code.template">
|
||||
<field name="name">Base adquisiciones intracomunitarias bienes y servicios corrientes (4%)</field>
|
||||
<field name="name">Base adquisiciones intracomunitarias bienes y serv. corr. (4%)</field>
|
||||
<field name="code">--</field>
|
||||
<field name="parent_id" ref="iva_ded_30"/>
|
||||
<field name="sign">1.0</field>
|
||||
</record>
|
||||
<record id="iva_ded_30_10" model="account.tax.code.template">
|
||||
<field name="name">Base adquisiciones intracomunitarias bienes y servicios corrientes (10%)</field>
|
||||
<field name="name">Base adquisiciones intracomunitarias bienes y serv. corr. (10%)</field>
|
||||
<field name="code">--</field>
|
||||
<field name="parent_id" ref="iva_ded_30"/>
|
||||
<field name="sign">1.0</field>
|
||||
</record>
|
||||
<record id="iva_ded_30_21" model="account.tax.code.template">
|
||||
<field name="name">Base adquisiciones intracomunitarias bienes y servicios corrientes (21%)</field>
|
||||
<field name="name">Base adquisiciones intracomunitarias bienes y serv. corr. (21%)</field>
|
||||
<field name="code">--</field>
|
||||
<field name="parent_id" ref="iva_ded_30"/>
|
||||
<field name="sign">1.0</field>
|
||||
|
@ -427,19 +427,19 @@
|
|||
<field name="sign">1.0</field>
|
||||
</record>
|
||||
<record id="iva_ded_27_4" model="account.tax.code.template">
|
||||
<field name="name">Cuotas devengadas importaciones bienes y servicios corrientes (4%)</field>
|
||||
<field name="name">Cuotas devengadas importaciones bienes y serv. corr. (4%)</field>
|
||||
<field name="code">--</field>
|
||||
<field name="parent_id" ref="iva_ded_27"/>
|
||||
<field name="sign">1.0</field>
|
||||
</record>
|
||||
<record id="iva_ded_27_10" model="account.tax.code.template">
|
||||
<field name="name">Cuotas devengadas importaciones bienes y servicios corrientes (10%)</field>
|
||||
<field name="name">Cuotas devengadas importaciones bienes y serv. corr. (10%)</field>
|
||||
<field name="code">--</field>
|
||||
<field name="parent_id" ref="iva_ded_27"/>
|
||||
<field name="sign">1.0</field>
|
||||
</record>
|
||||
<record id="iva_ded_27_21" model="account.tax.code.template">
|
||||
<field name="name">Cuotas devengadas importaciones bienes y servicios corrientes (21%)</field>
|
||||
<field name="name">Cuotas devengadas importaciones bienes y serv. corr. (21%)</field>
|
||||
<field name="code">--</field>
|
||||
<field name="parent_id" ref="iva_ded_27"/>
|
||||
<field name="sign">1.0</field>
|
||||
|
@ -478,19 +478,19 @@
|
|||
<field name="sign">1.0</field>
|
||||
</record>
|
||||
<record id="iva_ded_31_4" model="account.tax.code.template">
|
||||
<field name="name">En adquisiciones intracomunitarias bienes y servicios corrientes (4%)</field>
|
||||
<field name="name">En adquisiciones intracomunitarias bienes y serv. corr. (4%)</field>
|
||||
<field name="code">--</field>
|
||||
<field name="parent_id" ref="iva_ded_31"/>
|
||||
<field name="sign">1.0</field>
|
||||
</record>
|
||||
<record id="iva_ded_31_10" model="account.tax.code.template">
|
||||
<field name="name">En adquisiciones intracomunitarias bienes y servicios corrientes (10%)</field>
|
||||
<field name="name">En adquisiciones intracomunitarias bienes y serv. corr. (10%)</field>
|
||||
<field name="code">--</field>
|
||||
<field name="parent_id" ref="iva_ded_31"/>
|
||||
<field name="sign">1.0</field>
|
||||
</record>
|
||||
<record id="iva_ded_31_21" model="account.tax.code.template">
|
||||
<field name="name">En adquisiciones intracomunitarias bienes y servicios corrientes (21%)</field>
|
||||
<field name="name">En adquisiciones intracomunitarias bienes y serv. corr. (21%)</field>
|
||||
<field name="code">--</field>
|
||||
<field name="parent_id" ref="iva_ded_31"/>
|
||||
<field name="sign">1.0</field>
|
||||
|
@ -772,4 +772,4 @@
|
|||
</record>
|
||||
|
||||
</data>
|
||||
</openerp>
|
||||
</openerp>
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (C) 2014 InnOpen Group Kft (<http://www.innopen.eu>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
# -*- encoding: utf-8 -*-
|
||||
##############################################################################
|
||||
#
|
||||
# Copyright (C) 2014 InnOpen Group Kft (<http://www.innopen.eu>).
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero 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 Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
|
||||
{
|
||||
'name': 'Hungarian - Accounting',
|
||||
'version': '1.0',
|
||||
'category': 'Localization/Account Charts',
|
||||
'description': """
|
||||
|
||||
Base module for Hungarian localization
|
||||
==========================================
|
||||
|
||||
This module consists :
|
||||
|
||||
- Generic Hungarian chart of accounts
|
||||
- Hungarian taxes
|
||||
- Hungarian Bank information
|
||||
|
||||
""",
|
||||
'author': 'InnOpen Group Kft',
|
||||
'website': 'http://www.innopen.eu',
|
||||
'license': 'AGPL-3',
|
||||
'depends': ['account','account_chart'],
|
||||
'data': [
|
||||
'data/account.account.template.csv',
|
||||
'data/account.tax.code.template.csv',
|
||||
'data/account.chart.template.csv',
|
||||
'data/account.tax.template.csv',
|
||||
'data/account.fiscal.position.template.csv',
|
||||
'data/account.fiscal.position.tax.template.csv',
|
||||
'data/res.bank.csv',
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'application':True,
|
||||
}
|
|
@ -0,0 +1,277 @@
|
|||
"id","code","name","parent_id/id","user_type/id","type","reconcile"
|
||||
"chart_hu_0",0,"Magyar főkönyvi kivonat",,"account.data_account_type_view","view","FALSE"
|
||||
"chart_hu_1_4","1-4","Mérleg számlák","chart_hu_0","account.data_account_type_view","view","FALSE"
|
||||
"chart_hu_1",1,"BEFEKTETETT ESZKÖZÖK","chart_hu_1_4","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_11",11,"IMMATERIÁLIS JAVAK","chart_hu_1","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_111",111,"Alapítás-átszervezés aktívált értéke","chart_hu_11","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_112",112,"Kísérleti fejlesztés aktívált értéke","chart_hu_11","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_113",113,"Vagyoni értékû jogok","chart_hu_11","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_114",114,"Szellemi termékek","chart_hu_11","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_115",115,"Üzleti vagy cégérték","chart_hu_11","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_117",117,"Immateriális javak értékhelyesbítése","chart_hu_11","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_12",12,"INGATLANOK, KAPCS. VAGYONI ÉRT. JOGOK","chart_hu_1","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_121",121,"Földterület","chart_hu_12","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_122",122,"Telek, telkesítés","chart_hu_12","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_123",123,"Épületek,épületrészek,tulajdoni hányadok","chart_hu_12","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_124",124,"Egyéb építmények","chart_hu_12","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_125",125,"Üzemkörön kivüli ingatlanok, épületek","chart_hu_12","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_126",126,"Ingatlanhoz kapcs. vagyoni ért. jogok","chart_hu_12","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_127",127,"Ingatlanok értékhelyesbítése","chart_hu_12","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_13",13,"MÜSZAKI BERENDEZÉSEK, GÉPEK, JÁRMÜVEK","chart_hu_1","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_131",131,"Termelõ gépek, berendezések, gyártóeszk.","chart_hu_13","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_132",132,"Termelésben résztvevõ jármûvek","chart_hu_13","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_137",137,"Müszaki gépek,felsz,járm. értékhelyesb.","chart_hu_13","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_14",14,"EGYÉB BERENDEZÉSEK, FELSZ., JÁRMÜVEK","chart_hu_1","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_141",141,"Üzemi berendezések, gépek,felszerelések","chart_hu_14","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_142",142,"Egyéb jármûvek","chart_hu_14","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_143",143,"Irodai, igazgatási berendezések","chart_hu_14","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_144",144,"Üzemkörön kivüli berendezések, felsz.","chart_hu_14","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_147",147,"Egyéb gépek,felsz,járm. értékhelyesbítés","chart_hu_14","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_15",15,"TENYÉSZÁLLATOK","chart_hu_1","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_151",151,"Tenyészállatok","chart_hu_15","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_16",16,"BERUHÁZÁSOK, FELúJÍTÁSOK","chart_hu_1","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_161",161,"Befejezetlen beruházások","chart_hu_16","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_162",162,"Felújítások","chart_hu_16","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_168",168,"Beruházások terven felüli értékcsökk.","chart_hu_16","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_17",17,"BEFEKTETETT Pü.I ESZKÖZÖK RÉSZESEDÉSEK","chart_hu_1","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_171",171,"Tartós részesedés kapcs. vállalkozásban","chart_hu_17","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_172",172,"Egyéb tartós részesedés","chart_hu_17","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_177",177,"Részesedések értékhelyesbítése","chart_hu_17","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_179",179,"Részesedések értékvesztése, visszaírása","chart_hu_17","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_18",18,"HITELVISZONYT MEGTESTESÍTÖ ÉRTÉKPAPÍROK","chart_hu_1","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_181",181,"Államkötvények","chart_hu_18","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_182",182,"Kapcsolt vállalkozások értékpapírjai","chart_hu_18","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_183",183,"Egyéb vállalkozások értékpapírjai","chart_hu_18","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_184",184,"Tartós diszkont értékpapírok","chart_hu_18","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_189",189,"Értékpapírok értékvesztése, visszaírása","chart_hu_18","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_19",19,"TARTÓSAN ADOTT KÖLCSÖNÖK","chart_hu_1","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_191",191,"Tartósan adott kölcsönök kapcs. váll.","chart_hu_19","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_192",192,"Tartósan adott kölcsön egyéb rész.váll.","chart_hu_19","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_193",193,"Egyéb tartósan adott kölcsönök","chart_hu_19","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_195",195,"Tartós bankbetétek kapcs. váll.-ban","chart_hu_19","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_196",196,"Tartós bankbetétek egyéb rész. váll.-ban","chart_hu_19","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_197",197,"Egyéb tartós bankbetétek","chart_hu_19","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_198",198,"Pénzügyi lízing miatti tartós követelés","chart_hu_19","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_199",199,"Tartósan adott kölcsönök értékvesztése","chart_hu_19","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_2",2,"KÉSZLETEK","chart_hu_1_4","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_21",21,"ANYAGOK","chart_hu_2","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_211",211,"Nyers- és alapanyagok","chart_hu_21","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_22",22,"ANYAGOK","chart_hu_2","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_221",221,"Segédanyagok","chart_hu_22","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_23",23,"BEFEJEZETLEN TERMELÉS ÉS FÉLKÉSZTERMÉKEK","chart_hu_2","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_231",231,"Befejezetlen termelés","chart_hu_23","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_25",25,"KÉSZTERMÉKEK","chart_hu_2","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_251",251,"Késztermékek","chart_hu_25","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_26",26,"ÁRUK","chart_hu_2","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_261",261,"Áruk beszerzési áron","chart_hu_26","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_27",27,"KÖZVETÍTETT SZOLGÁLTATÁSOK","chart_hu_2","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_271",271,"Közvetített szolgáltatások","chart_hu_27","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_28",28,"BETÉTDÍJAS GÖNGYÖLEGEK","chart_hu_2","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_281",281,"Betétdíjas göngyölegek","chart_hu_28","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_3",3,"KÖVETELÉSEK,PÉNZÜGYI ESZK,AKTÍV IDÖB.ELH","chart_hu_1_4","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_31",31,"KÖVETELÉSEK ÁRUSZÁLL.- SZOLGÁLTATÁSBÓL","chart_hu_3","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_311",311,"Belföldi követelések","chart_hu_31","account.data_account_type_receivable","receivable","TRUE"
|
||||
"chart_hu_316",316,"Külföldi követelések","chart_hu_31","account.data_account_type_receivable","receivable","TRUE"
|
||||
"chart_hu_35",35,"ADOTT ELÖLEGEK","chart_hu_3","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_351",351,"Adott elõlegek","chart_hu_35","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_36",36,"EGYÉB KÖVETELÉSEK","chart_hu_3","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_361",361,"Munkavállalókkal szembeni követelés","chart_hu_36","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_368",368,"Különféle egyéb követelések","chart_hu_36","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_37",37,"ÉRTÉKPAPÍROK","chart_hu_3","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_371",371,"Részesedés kapcsolt vállalkozásban","chart_hu_37","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_372",372,"Egyéb részesedés","chart_hu_37","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_373",373,"Saját részvények, saját üzletrészek","chart_hu_37","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_374",374,"Forgatási célú hitelv. m. értékpapírok","chart_hu_37","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_38",38,"PÉNZESZKÖZÖK","chart_hu_3","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_381",381,"Pénztárak","chart_hu_38","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_3811",3811,"Pénztár","chart_hu_381","account.data_account_type_cash","Liquidity","FALSE"
|
||||
"chart_hu_382",382,"Valuta pénztár","chart_hu_38","account.data_account_type_cash","other","FALSE"
|
||||
"chart_hu_384",384,"Elszámolási betétszámla","chart_hu_38","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_3841",3841,"Bankszámla","chart_hu_384","account.data_account_type_bank","Liquidity","FALSE"
|
||||
"chart_hu_385",385,"Elkülönített betétszámlák","chart_hu_38","account.data_account_type_bank","other","FALSE"
|
||||
"chart_hu_386",386,"Deviza betétszámla","chart_hu_38","account.data_account_type_bank","other","FALSE"
|
||||
"chart_hu_387",387,"Pénzhelyettesítõ eszk. (utalvány, jegy)","chart_hu_38","account.data_account_type_bank","other","FALSE"
|
||||
"chart_hu_389",389,"Átvezetési számla","chart_hu_38","account.data_account_type_bank","other","FALSE"
|
||||
"chart_hu_39",39,"AKTÍV IDÖBELI ELHATÁROLÁS","chart_hu_3","account.account_type_asset_view1","view","FALSE"
|
||||
"chart_hu_391",391,"Aktív idõbeli elhatárolása","chart_hu_39","account.data_account_type_asset","other","FALSE"
|
||||
"chart_hu_4",4,"FORRÁSOK (PASSZÍVÁK)","chart_hu_1_4","account.account_type_liability_view1","view","FALSE"
|
||||
"chart_hu_41",41,"SAJÁT TÖKE","chart_hu_4","account.account_type_liability_view1","view","FALSE"
|
||||
"chart_hu_411",411,"Jegyzett tõke","chart_hu_41","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_412",412,"Tõketartalék","chart_hu_41","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_413",413,"Eredménytartalék","chart_hu_41","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_414",414,"Lekötött tartalék","chart_hu_41","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_417",417,"Értékelési tartalék","chart_hu_41","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_419",419,"Mérleg szerinti eredmény","chart_hu_41","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_42",42,"CÉLTARTALÉKOK","chart_hu_4","account.account_type_liability_view1","view","FALSE"
|
||||
"chart_hu_421",421,"Céltartalék várható kötelezettségre","chart_hu_42","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_43",43,"HÁTRASOROLT KÖTELEZETTSÉGEK","chart_hu_4","account.account_type_liability_view1","view","FALSE"
|
||||
"chart_hu_431",431,"Hátrasorolt kötelezettség","chart_hu_43","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_44",44,"HOSSZÚ LEJÁRATÚ KÖTELEZETTSÉGEK","chart_hu_4","account.account_type_liability_view1","view","FALSE"
|
||||
"chart_hu_441",441,"Hosszú lejáratra kapott kölcsönök","chart_hu_44","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_442",442,"Átváltoztatható kötvények","chart_hu_44","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_443",443,"Tartozások kötvénykibocsátásból","chart_hu_44","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_444",444,"Beruházási és fejlesztési hitelek","chart_hu_44","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_445",445,"Egyéb hosszú lejáratú hitelek","chart_hu_44","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_446",446,"Tartós köt. kapcs. vállalkozással sz.","chart_hu_44","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_447",447,"Tartós köt. egyéb rész. váll. szemben","chart_hu_44","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_448",448,"Pénzügyi lízinggel kapcsolatos kötelez.","chart_hu_44","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_449",449,"Egyéb hosszú lej. kötelezettségek","chart_hu_44","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_45",45,"RÖVID LEJÁRATú KÖTELEZETTSÉGEK","chart_hu_4","account.account_type_liability_view1","view","FALSE"
|
||||
"chart_hu_451",451,"Rövid lejáratú kölcsönök","chart_hu_45","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_452",452,"Rövid lejáratú hitelek","chart_hu_45","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_453",453,"Vevõktõl kapott elõlegek","chart_hu_45","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_454",454,"Szállítók","chart_hu_45","account.account_type_liability_view1","view","FALSE"
|
||||
"chart_hu_4541",4541,"Belföldi szállítók","chart_hu_454","account.data_account_type_payable","payable","TRUE"
|
||||
"chart_hu_4542",4542,"Külföldi szállítók","chart_hu_454","account.data_account_type_payable","payable","TRUE"
|
||||
"chart_hu_46",46,"EGYÉB RÖVID LEJÁRATú KÖTELEZETTSÉGEK","chart_hu_4","account.account_type_liability_view1","view","FALSE"
|
||||
"chart_hu_461",461,"Társasági adó és osztalékadó elszámolás","chart_hu_46","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_462",462,"Személyi jövedelemadó elszámolása","chart_hu_46","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_463",463,"Költségvetési befizetési kötelezettségek","chart_hu_46","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_464",464,"Költségvetési befizetési köt.teljesítése","chart_hu_46","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_465",465,"Vám- és Pénzügyõrség elszámolási számla","chart_hu_46","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_466",466,"Elõzetesen felszámított ált.forgalmi adó","chart_hu_46","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_467",467,"Fizetendõ általános forgalmi adó","chart_hu_46","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_468",468,"Áfa pénzügyi elszámolási számla","chart_hu_46","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_469",469,"Önkormányzati adók elszámolási számla","chart_hu_46","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_47",47,"RÖVID LEJÁRATú KÖTELEZETTSÉGEK","chart_hu_4","account.account_type_liability_view1","view","FALSE"
|
||||
"chart_hu_471",471,"Jövedelem elszámolási számla","chart_hu_47","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_472",472,"Fel nem vett járandóságok","chart_hu_47","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_473",473,"Társadalombiztosítási kötelezettség","chart_hu_47","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_474",474,"Elkülönített alapokkal kapcs. fiz. köt","chart_hu_47","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_475",475,"Magánnyugdíjpénztárak befiz. kötelezetts","chart_hu_47","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_476",476,"Egyéb rövid lej.kötelezettség munkaváll.","chart_hu_47","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_477",477,"Egyéb rövid lejáratú kötelezettség","chart_hu_47","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_478",478,"Magánszemélytõl levont 4% különadó","chart_hu_47","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_479",479,"Egyéb befizetési kötelezettségek","chart_hu_47","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_48",48,"PASSZÍV IDÖBELI ELHATÁROLÁS","chart_hu_4","account.account_type_liability_view1","view","FALSE"
|
||||
"chart_hu_481",481,"Bevételek passzív idõbeli elhatárolása","chart_hu_48","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_482",482,"Költségek,ráford. passzív idõbeli elhat.","chart_hu_48","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_483",483,"Halasztott bevételek","chart_hu_48","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_49",49,"ÉVI MÉRLEG SZÁMLÁK","chart_hu_4","account.account_type_liability_view1","view","FALSE"
|
||||
"chart_hu_491",491,"Nyitómérleg számla","chart_hu_49","account.data_account_type_liability","other","FALSE"
|
||||
"chart_hu_5_9","5-9","Eredmény számlák","chart_hu_0","account.data_account_type_view","view","FALSE"
|
||||
"chart_hu_5",5,"KÖLTSÉGNEMEK","chart_hu_5_9","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_51",51,"ANYAGKÖLTSÉG","chart_hu_5","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_511",511,"Vásárolt anyagok költségei","chart_hu_51","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_512",512,"Egy éven belül elhaszn. anyagi eszközök","chart_hu_51","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_513",513,"Egyéb anyagköltség","chart_hu_51","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_519",519,"Anyagköltség megtérülés","chart_hu_51","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_52",52,"IGÉNYBE VETT SZOLGÁLTATÁSOK KÖLTSÉGEI","chart_hu_5","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_521",521,"Szállítási, rakodási költség","chart_hu_52","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_522",522,"Bérleti díjak","chart_hu_52","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_523",523,"Javítási, karbantartási költségek","chart_hu_52","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_524",524,"Hirdetés, reklám-propaganda költség","chart_hu_52","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_525",525,"Oktatási, továbbképzési költségek","chart_hu_52","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_526",526,"Utazási- és kiküldetési költségek","chart_hu_52","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_527",527,"Postai, távközlési költségek","chart_hu_52","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_528",528,"Szakkönyv, folyóirat, napilap beszerzés","chart_hu_52","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_529",529,"Egyéb igénybevett szolgáltatások ktg-ei","chart_hu_52","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_53",53,"EGYÉB SZOLGÁLTATÁSOK KÖLTSÉGEI","chart_hu_5","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_531",531,"Hatósági igazgatási díjak (illetékek)","chart_hu_53","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_532",532,"Pénzügyi szolg-i díjak, bankköltségek","chart_hu_53","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_533",533,"Biztosítási díjak","chart_hu_53","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_54",54,"BÉRKÖLTSÉG","chart_hu_5","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_541",541,"Munkavállalók munkabér költsége","chart_hu_54","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_542",542,"Megbízási díjak bérköltség terhére","chart_hu_54","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_543",543,"Tagok személyes közr. ellenértéke","chart_hu_54","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_544",544,"Egyszerûsített fogl. bérköltsége","chart_hu_54","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_55",55,"SZEMÉLYI JELLEGû EGYÉB KIFIZETÉSEK","chart_hu_5","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_551",551,"Személyi jellegû kifizetések","chart_hu_55","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_552",552,"Jóléti és kulturális költségek","chart_hu_55","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_553",553,"Természetbeni juttatások","chart_hu_55","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_554",554,"Egyéb személyi jellegû kifizetések","chart_hu_55","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_555",555,"Magánnyugdíjpénztári tagdíjak, hozzájár.","chart_hu_55","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_556",556,"Foglalkoztatót terhelõ táppénz hjárulás","chart_hu_55","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_557",557,"Kifizetõt terhelõ személyi jövedelemadó","chart_hu_55","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_56",56,"BÉRJÁRULÉKOK","chart_hu_5","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_561",561,"Társadalombiztosítási járulék","chart_hu_56","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_562",562,"Egészségügyi hozzájárulás","chart_hu_56","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_563",563,"Munkaadói járulék","chart_hu_56","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_564",564,"Szakképzési hozzájárulás","chart_hu_56","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_565",565,"Rehabilitációs hozzájárulás","chart_hu_56","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_566",566,"Egyszerûsített közteherviselési hjár","chart_hu_56","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_567",567,"Egyszerûsített fogl. közteher","chart_hu_56","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_568",568,"Közteherjegy","chart_hu_56","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_57",57,"ÉRTÉKCSÖKKENÉSI LEÍRÁS","chart_hu_5","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_571",571,"Terv szerinti értékcsökkenés lineáris","chart_hu_57","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_572",572,"Terv szerinti egyösszegû (kisértékûek)","chart_hu_57","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_58",58,"AKTÍVÁLT SAJÁT TELJESÍTMÉNYEK ÉRTÉKE","chart_hu_5","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_581",581,"Saját term. készletek állományváltozása","chart_hu_58","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_582",582,"Saját elõállítási eszközök aktivált ért.","chart_hu_58","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_59",59,"KÖLTSÉGNEM ÁTVEZETÉSI SZÁMLA","chart_hu_5","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_591",591,"Anyagköltség átvezetési szla","chart_hu_59","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_592",592,"Igénybevett szolg. átvezetési szla","chart_hu_59","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_593",593,"Egyéb szolgáltatások átvezetési szla","chart_hu_59","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_594",594,"Bérköltség átvezetési szla","chart_hu_59","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_595",595,"Személyi jell. kif. átvezetési szla","chart_hu_59","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_596",596,"Bérjárulékok átvezetési szla","chart_hu_59","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_597",597,"Értékcsökkenési leírás átvez. szla","chart_hu_59","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_8",8,"AZ ÉRTÉKESÍTÉS ÖNKÖLTS. ÉS RÁFORDÍTÁSOK","chart_hu_5_9","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_81",81,"ANYAGJELLEGÛ RÁFORDÍTÁSOK","chart_hu_8","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_811",811,"Anyagköltség","chart_hu_81","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_812",812,"Igénybevett szolgáltatások értéke","chart_hu_81","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_813",813,"Egyéb szolgáltatások értéke","chart_hu_81","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_814",814,"Eladott áruk beszerzési értéke","chart_hu_81","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_815",815,"Eladott (közvetített) szolg. értéke","chart_hu_81","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_82",82,"SZEMÉLYI JELLEGû RÁFORDÍTÁSOK","chart_hu_8","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_821",821,"Bérköltség","chart_hu_82","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_822",822,"Személyi jellegü egyéb kifizetések","chart_hu_82","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_823",823,"Bérjárulékok","chart_hu_82","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_83",83,"ÉRTÉKCSÖKKENÉSI LEÍRÁS","chart_hu_8","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_86",86,"EGYÉB RÁFORDÍTÁSOK","chart_hu_8","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_861",861,"Értékesített eszk.imm.javak nytsz értéke","chart_hu_86","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_862",862,"Ért.átruházott követelések könyvsz. ért.","chart_hu_86","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_863",863,"Az üzleti évhez kapcs. ráfordítások","chart_hu_86","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_864",864,"Utólag adott pü. rendezett engedmény","chart_hu_86","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_865",865,"Céltartalék képzése","chart_hu_86","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_866",866,"Elszámolt értékvesztés, tervenf. értékcs","chart_hu_86","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_867",867,"Adók, illetékek, hozzájárulások","chart_hu_86","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_869",869,"Különféle egyéb ráfordítások","chart_hu_86","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_87",87,"PÉNZÜGYI MÜVELETEK RÁFORDÍTÁSAI","chart_hu_8","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_871",871,"Befektetett püi. eszk. árf.vesztesége","chart_hu_87","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_872",872,"Fizetendõ kamatok, kamatjell. ráford.","chart_hu_87","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_874",874,"Részesedések,é.papírok,bankb. értékveszt","chart_hu_87","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_875",875,"Forgóeszk. értékpapír árf.vesztesége","chart_hu_87","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_876",876,"Átváltási, értékelési árfolyamveszteség","chart_hu_87","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_877",877,"Egyéb árfolyamveszteségek, opciós díjak","chart_hu_87","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_878",878,"Vásárolt köv. kapcs. ráfordítások","chart_hu_87","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_879",879,"Egyéb pénzügyi ráfordítások","chart_hu_87","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_88",88,"RENDKIVÜLI RÁFORDÍTÁSOK","chart_hu_8","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_881",881,"Társaságban bevitt eszk. nytsz. értéke","chart_hu_88","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_887",887,"Saját üzletrész nyilvántartási értéke","chart_hu_88","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_888",888,"Tartozásátv. szerz. szerinti összege","chart_hu_88","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_889",889,"Egyéb vagyoncsökk. rendkívüli ráfordítás","chart_hu_88","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_89",89,"NYERESÉGET TERHELÖ ADÓK","chart_hu_8","account.data_account_type_expense","view","FALSE"
|
||||
"chart_hu_891",891,"Társasági adó","chart_hu_89","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_892",892,"Társas vállalkozás különadója","chart_hu_89","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_895",895,"Egyszerüsített vállalkozói adó","chart_hu_89","account.data_account_type_expense","other","FALSE"
|
||||
"chart_hu_9",9,"AZ ÉRTÉKESÍTÉS ÁRBEVÉTELE, BEVÉTELEK","chart_hu_5_9","account.data_account_type_income","view","FALSE"
|
||||
"chart_hu_91",91,"BELFÖLDI ÉRKÉKESÍTÉS ÁRBEVÉTELE","chart_hu_9","account.data_account_type_income","view","FALSE"
|
||||
"chart_hu_911",911,"Belföldi értékesítés árbevétele","chart_hu_91","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_92",92,"BELFÖLDI ÉRTÉKESÍTÉS ÁRBEVÉTELE","chart_hu_9","account.data_account_type_income","view","FALSE"
|
||||
"chart_hu_921",921,"Belföldi értékesítés árbevétele","chart_hu_92","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_93",93,"EXPORT ÉRTÉKESÍTÉS ÁRBEVÉTELE","chart_hu_9","account.data_account_type_income","view","FALSE"
|
||||
"chart_hu_931",931,"Export értékesítés árbev. EU tagországba","chart_hu_93","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_932",932,"Export értékesítés árbev.nem EU tagorsz.","chart_hu_93","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_96",96,"EGYÉB BEVÉTELEK","chart_hu_9","account.data_account_type_income","view","FALSE"
|
||||
"chart_hu_961",961,"Ért.immat. javak, tárgyi eszk.bevétele","chart_hu_96","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_962",962,"Ért,átruházott követelések elism.mértéke","chart_hu_96","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_963",963,"Az üzleti évhez kapcs. egyéb bevételek","chart_hu_96","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_964",964,"Utólag kapott pü. rendezett engedmény","chart_hu_96","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_965",965,"Céltartalék felhasználása","chart_hu_96","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_966",966,"Értékvesztések visszaírása, tervenf.écs.","chart_hu_96","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_967",967,"Visszafiz. köt. nélkül kapott támogatás","chart_hu_96","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_968",968,"Biztosító által visszaig. kártérítés ö.","chart_hu_96","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_969",969,"Különféle egyéb bevételek","chart_hu_96","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_97",97,"PÉNZÜGYI MÜVELETEK BEVÉTELEI","chart_hu_9","account.data_account_type_income","view","FALSE"
|
||||
"chart_hu_971",971,"Kapott (járó) osztalék, részesedés","chart_hu_97","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_972",972,"Részesedések ért. árfolyamnyeresége","chart_hu_97","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_973",973,"Befekt. püi.eszk. kamatai, árf.nyeres.","chart_hu_97","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_974",974,"Egyéb kapott kamatok,kamatjell.bevételek","chart_hu_97","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_975",975,"Forgóeszk. értékpapír árfolyamnyeresége","chart_hu_97","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_976",976,"Átváltási, átértékeléskori árf.nyereség","chart_hu_97","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_977",977,"Egyéb árfolyamnyereségek, opciós bev.","chart_hu_97","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_978",978,"Vás. követelésekkel kapcs. bevételek","chart_hu_97","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_979",979,"Egyéb pénzügyi mûveletek bevételei","chart_hu_97","account.data_account_type_income","other","FALSE"
|
||||
"chart_hu_98",98,"RENDKIVÜLI BEVÉTELEK","chart_hu_9","account.data_account_type_income","view","FALSE"
|
||||
"chart_hu_981",981,"Rendkívüli bevételek","chart_hu_98","account.data_account_type_income","other","FALSE"
|
|
|
@ -0,0 +1,2 @@
|
|||
"id","name","code_digits","account_root_id/id","tax_code_root_id/id","bank_account_view_id/id","property_account_receivable/id","property_account_payable/id","property_account_expense_categ/id","property_account_income_categ/id","property_account_expense/id","property_account_income/id","tax_code_root_id/id"
|
||||
"hungarian_chart_template","Magyar főkönyvi kivonat",4,"chart_hu_0","tax_code_hu_1000","chart_hu_384","chart_hu_311","chart_hu_4541","chart_hu_81","chart_hu_911","chart_hu_81","chart_hu_911","tax_code_hu_vat"
|
|
|
@ -0,0 +1,43 @@
|
|||
"id","display_detail","style_overwrite","account_type_ids/id","account_ids/id","parent_id/id","sign","name","account_report_id/id","sequence","type"
|
||||
"l10n_hu.account_financial_report_pl_hu","Display children flat","Main Title 1 (bold, underlined)",,,,"Reverse balance sign","Eredménykimutatás – HU",,30,"View"
|
||||
"l10n_hu.account_financial_report_pl_hu_G","Display children flat","Main Title 1 (bold, underlined)",,,"l10n_hu.account_financial_report_pl_hu","Reverse balance sign","Mérleg szerinti eredmény",,10,"View"
|
||||
"l10n_hu.account_financial_report_pl_hu_F","Display children flat","Main Title 1 (bold, underlined)",,,"l10n_hu.account_financial_report_pl_hu_G","Reverse balance sign","Adózott eredmény",,12,"View"
|
||||
"l10n_hu.account_financial_report_pl_hu_XIII","Display children with hierarchy","Normal Text","account_type_pl_hu_XIII",,"l10n_hu.account_financial_report_pl_hu_G","Reverse balance sign","Osztalék",,11,"Account Type"
|
||||
"l10n_hu.account_financial_report_pl_hu_E","Display children flat","Main Title 1 (bold, underlined)",,,"l10n_hu.account_financial_report_pl_hu_F","Reverse balance sign","Adózás előtti eredmény",,14,"View"
|
||||
"l10n_hu.account_financial_report_pl_hu_XII","Display children with hierarchy","Normal Text","account_type_pl_hu_XII",,"l10n_hu.account_financial_report_pl_hu_F","Reverse balance sign","Adófizetési kötelezettség",,13,"Account Type"
|
||||
"l10n_hu.account_financial_report_pl_hu_D","Display children flat","Title 2 (bold)",,,"l10n_hu.account_financial_report_pl_hu_E","Reverse balance sign","Rendkívüli eredmény",,15,"View"
|
||||
"l10n_hu.account_financial_report_pl_hu_X","Display children with hierarchy","Normal Text","account_type_pl_hu_X",,"l10n_hu.account_financial_report_pl_hu_D","Reverse balance sign","Rendkívüli bevételek",,17,"Account Type"
|
||||
"l10n_hu.account_financial_report_pl_hu_XI","Display children with hierarchy","Normal Text","account_type_pl_hu_XI",,"l10n_hu.account_financial_report_pl_hu_D","Reverse balance sign","Rendkivüli ráfordítások",,16,"Account Type"
|
||||
"l10n_hu.account_financial_report_pl_hu_C","Display children flat","Main Title 1 (bold, underlined)",,,"l10n_hu.account_financial_report_pl_hu_E","Reverse balance sign","Szokásos vállalkozási eredmény",,18,"View"
|
||||
"l10n_hu.account_financial_report_pl_hu_A","Display children flat","Main Title 1 (bold, underlined)",,,"l10n_hu.account_financial_report_pl_hu_C","Reverse balance sign","Üzemi (üzleti) tevékenység eredménye",,22,"View"
|
||||
"l10n_hu.account_financial_report_pl_hu_B","Display children flat","Title 2 (bold)",,,"l10n_hu.account_financial_report_pl_hu_C","Reverse balance sign","Pénzügyi műveletek eredménye",,19,"View"
|
||||
"l10n_hu.account_financial_report_pl_hu_VIII","Display children with hierarchy","Normal Text","account_type_pl_hu_VIII",,"l10n_hu.account_financial_report_pl_hu_B","Reverse balance sign","Pénzügyi műveletek bevételei",,21,"Account Type"
|
||||
"l10n_hu.account_financial_report_pl_hu_IX","Display children with hierarchy","Normal Text","account_type_pl_hu_IX",,"l10n_hu.account_financial_report_pl_hu_B","Reverse balance sign","Pénzügyi műveletek ráfordításai ",,20,"Account Type"
|
||||
"l10n_hu.account_financial_report_pl_hu_I","Display children with hierarchy","Normal Text","account_type_pl_hu_I",,"l10n_hu.account_financial_report_pl_hu_A","Reverse balance sign","Értékesítés nettó árbevétele ",,1,"Account Type"
|
||||
"l10n_hu.account_financial_report_pl_hu_II","Display children with hierarchy","Normal Text","account_type_pl_hu_II",,"l10n_hu.account_financial_report_pl_hu_A","Reverse balance sign","Aktivált saját teljesítmények értéke ",,2,"Account Type"
|
||||
"l10n_hu.account_financial_report_pl_hu_III","Display children with hierarchy","Normal Text","account_type_pl_hu_III",,"l10n_hu.account_financial_report_pl_hu_A","Reverse balance sign","Egyéb bevételek",,3,"Account Type"
|
||||
"l10n_hu.account_financial_report_pl_hu_IV","Display children with hierarchy","Normal Text","account_type_pl_hu_IV",,"l10n_hu.account_financial_report_pl_hu_A","Reverse balance sign","Anyagjellegű ráfordítások ",,4,"Account Type"
|
||||
"l10n_hu.account_financial_report_pl_hu_V","Display children with hierarchy","Normal Text","account_type_pl_hu_V",,"l10n_hu.account_financial_report_pl_hu_A","Reverse balance sign","Személyi jellegű ráfordítások ",,5,"Account Type"
|
||||
"l10n_hu.account_financial_report_pl_hu_VI","Display children with hierarchy","Normal Text","account_type_pl_hu_VI",,"l10n_hu.account_financial_report_pl_hu_A","Reverse balance sign","Értékcsökkenési leírás",,6,"Account Type"
|
||||
"l10n_hu.account_financial_report_pl_hu_VII","Display children with hierarchy","Normal Text","account_type_pl_hu_VII",,"l10n_hu.account_financial_report_pl_hu_A","Reverse balance sign","Egyéb ráfordítások",,7,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu","Display children flat",,,,,"Preserve balance sign","Mérleg – HU",,30,"View"
|
||||
"l10n_hu.account_financial_report_bs_hu_AC","Display children with hierarchy","Main Title 1 (bold, underlined)",,,"l10n_hu.account_financial_report_bs_hu","Preserve balance sign","Eszközök Összesen",,100,"View"
|
||||
"l10n_hu.account_financial_report_bs_hu_DG","Display children with hierarchy","Main Title 1 (bold, underlined)",,,"l10n_hu.account_financial_report_bs_hu","Reverse balance sign","Források Összesen",,200,"View"
|
||||
"l10n_hu.account_financial_report_bs_hu_A","Display children flat","Title 2 (bold)","account_type_bs_hu_A",,"l10n_hu.account_financial_report_bs_hu_AC","Preserve balance sign","Befektetett Eszközök",,110,"View"
|
||||
"l10n_hu.account_financial_report_bs_hu_AI","Display children flat","Normal Text","account_type_bs_hu_AI",,"l10n_hu.account_financial_report_bs_hu_A","Preserve balance sign","Immateriális Javak",,10,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_AII","Display children flat","Normal Text","account_type_bs_hu_AII",,"l10n_hu.account_financial_report_bs_hu_A","Preserve balance sign","Tárgyi Eszközök",,10,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_AIII","Display children flat","Normal Text","account_type_bs_hu_AIII",,"l10n_hu.account_financial_report_bs_hu_A","Preserve balance sign","Befektetett Pénzügyi Eszközök",,10,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_B","Display children with hierarchy","Title 2 (bold)","account_type_bs_hu_B",,"l10n_hu.account_financial_report_bs_hu_AC","Preserve balance sign","Forgóeszközök",,120,"View"
|
||||
"l10n_hu.account_financial_report_bs_hu_BI","Display children flat","Normal Text","account_type_bs_hu_BI",,"l10n_hu.account_financial_report_bs_hu_B","Preserve balance sign","Készletek",,10,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_BII","Display children flat","Normal Text","account_type_bs_hu_BII",,"l10n_hu.account_financial_report_bs_hu_B","Preserve balance sign","Követelések",,10,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_BIII","Display children flat","Normal Text","account_type_bs_hu_BIII",,"l10n_hu.account_financial_report_bs_hu_B","Preserve balance sign","Értékpapírok",,10,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_BIV","Display children flat","Normal Text","account_type_bs_hu_BIV",,"l10n_hu.account_financial_report_bs_hu_B","Preserve balance sign","Pénzeszközök",,10,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_C","Display children with hierarchy","Title 2 (bold)","account_type_bs_hu_C",,"l10n_hu.account_financial_report_bs_hu_AC","Preserve balance sign","Aktív Időbeli Elhatárolások",,130,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_pl","Display children flat","Title 2 (bold)",,,"l10n_hu.account_financial_report_bs_hu_DG","Reverse balance sign","Számított eredmény","l10n_hu.account_financial_report_pl_hu",201,"Report Value"
|
||||
"l10n_hu.account_financial_report_bs_hu_D","Display children with hierarchy","Title 2 (bold)","account_type_bs_hu_D",,"l10n_hu.account_financial_report_bs_hu_DG","Reverse balance sign","Saját Tőke",,210,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_E","Display children with hierarchy","Title 2 (bold)","account_type_bs_hu_E",,"l10n_hu.account_financial_report_bs_hu_DG","Reverse balance sign","Céltartalékok",,220,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_F","Display children with hierarchy","Title 2 (bold)","account_type_bs_hu_F",,"l10n_hu.account_financial_report_bs_hu_DG","Reverse balance sign","Kötelezettségek",,230,"View"
|
||||
"l10n_hu.account_financial_report_bs_hu_FI","Display children with hierarchy","Normal Text","account_type_bs_hu_FI",,"l10n_hu.account_financial_report_bs_hu_F","Reverse balance sign","Hátrasorolt Kötelezettségek",,10,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_FII","Display children with hierarchy","Normal Text","account_type_bs_hu_FII",,"l10n_hu.account_financial_report_bs_hu_F","Reverse balance sign","Hosszú Lejáratú Kötelezettségek",,10,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_FIII","Display children with hierarchy","Normal Text","account_type_bs_hu_FIII",,"l10n_hu.account_financial_report_bs_hu_F","Reverse balance sign","Rövid Lejáratú Kötelezettségek",,10,"Account Type"
|
||||
"l10n_hu.account_financial_report_bs_hu_G","Display children with hierarchy","Title 2 (bold)","account_type_bs_hu_G",,"l10n_hu.account_financial_report_bs_hu_DG","Reverse balance sign","Passzív Időbeli Elhatárolások",,240,"Account Type"
|
|
|
@ -0,0 +1,23 @@
|
|||
"id","tax_src_id/id","tax_dest_id/id","position_id/id"
|
||||
"fiscal_position_hu_exempt_tax_F27","F27","FA","fiscal_position_hu_exempt"
|
||||
"fiscal_position_hu_exempt_tax_F18","F18","FA","fiscal_position_hu_exempt"
|
||||
"fiscal_position_hu_exempt_tax_F5","F5","FA","fiscal_position_hu_exempt"
|
||||
"fiscal_position_hu_exempt_tax_V27","V27","VA","fiscal_position_hu_exempt"
|
||||
"fiscal_position_hu_exempt_tax_V18","V18","VA","fiscal_position_hu_exempt"
|
||||
"fiscal_position_hu_exempt_tax_V5","V5","VA","fiscal_position_hu_exempt"
|
||||
"fiscal_position_hu_eu_tax_F27","F27","FEU","fiscal_position_hu_eu"
|
||||
"fiscal_position_hu_eu_tax_F18","F18","FEU","fiscal_position_hu_eu"
|
||||
"fiscal_position_hu_eu_tax_F5","F5","FEU","fiscal_position_hu_eu"
|
||||
"fiscal_position_hu_eu_tax_FA","FA","FEU","fiscal_position_hu_eu"
|
||||
"fiscal_position_hu_eu_tax_V27","V27","VEU","fiscal_position_hu_eu"
|
||||
"fiscal_position_hu_eu_tax_V18","V18","VEU","fiscal_position_hu_eu"
|
||||
"fiscal_position_hu_eu_tax_V5","V5","VEU","fiscal_position_hu_eu"
|
||||
"fiscal_position_hu_eu_tax_VA","VA","VEU","fiscal_position_hu_eu"
|
||||
"fiscal_position_hu_eu_out_tax_F27","F27","FEUO","fiscal_position_hu_eu_out"
|
||||
"fiscal_position_hu_eu_out_tax_F18","F18","FEUO","fiscal_position_hu_eu_out"
|
||||
"fiscal_position_hu_eu_out_tax_F5","F5","FEUO","fiscal_position_hu_eu_out"
|
||||
"fiscal_position_hu_eu_out_tax_FA","FA","FEUO","fiscal_position_hu_eu_out"
|
||||
"fiscal_position_hu_eu_out_tax_V27","V27","VEUO","fiscal_position_hu_eu_out"
|
||||
"fiscal_position_hu_eu_out_tax_V18","V18","VEUO","fiscal_position_hu_eu_out"
|
||||
"fiscal_position_hu_eu_out_tax_V5","V5","VEUO","fiscal_position_hu_eu_out"
|
||||
"fiscal_position_hu_eu_out_tax_VA","VA","VEUO","fiscal_position_hu_eu_out"
|
|
|
@ -0,0 +1,4 @@
|
|||
"id","chart_template_id/id","name"
|
||||
"fiscal_position_hu_exempt","hungarian_chart_template","Alanyi adómentes"
|
||||
"fiscal_position_hu_eu","hungarian_chart_template","EU partner"
|
||||
"fiscal_position_hu_eu_out","hungarian_chart_template","EU-n kívüli partner"
|
|
|
@ -0,0 +1,26 @@
|
|||
"id","name","code","parent_id:id","notprintable","sign"
|
||||
"tax_code_hu_vat","Általános Forgalmi Adó","ÁFA",,,"1.0"
|
||||
"tax_code_hu_vat_base","ÁFA alap","ÁFA – alap","tax_code_hu_vat",,"1.0"
|
||||
"tax_code_hu_vat_position","ÁFA fizetndő / visszaigényelhető","ÁFA – fiz/vissz","tax_code_hu_vat",,"1.0"
|
||||
"tax_code_hu_1021","Adóalap - Fizetendő ÁFA 18%","06","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1011","Adóalap - Fizetendő ÁFA 27%","07","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1031","Adóalap - Fizetendő ÁFA 5%","05","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1041","Adóalap - Fizetendő ÁFA alanyi adómentes","04","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1051","Adóalap - Fizetendő ÁFA EU","02","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1061","Adóalap - Fizetendő ÁFA tárgyi adómentes","04","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1071","Adóalap - Fizetendő ÁFA Export","01","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1081","Adóalap – Fordított ÁFA","29","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1221","Adóalap - Visszaigényelhető ÁFA 18%","65","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1211","Adóalap - Visszaigényelhető ÁFA 27%","66","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1231","Adóalap - Visszaigényelhető ÁFA 5%","64","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1240","Adóalap - Visszaigényelhető ÁFA alanyi adómentes","63","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1260","Adóalap - Visszaigényelhető ÁFA tárgyi adómentes","63","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1250","Adóalap - Visszaigényelhető ÁFA EU","11","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1270","Adóalap – Import ÁFA","23","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1280","Adóalap – Fordított ÁFA","23","tax_code_hu_vat_base","FALSE","1.0"
|
||||
"tax_code_hu_1020","Fizetendő ÁFA 18%","06","tax_code_hu_vat_position","FALSE","1.0"
|
||||
"tax_code_hu_1010","Fizetendő ÁFA 27%","07","tax_code_hu_vat_position","FALSE","1.0"
|
||||
"tax_code_hu_1030","Fizetendő ÁFA 5%","05","tax_code_hu_vat_position","FALSE","1.0"
|
||||
"tax_code_hu_1220","Visszaigényelhető ÁFA 18%","65","tax_code_hu_vat_position","FALSE","-1.0"
|
||||
"tax_code_hu_1210","Visszaigényelhető ÁFA 27%","66","tax_code_hu_vat_position","FALSE","-1.0"
|
||||
"tax_code_hu_1230","Visszaigényelhető ÁFA 5%","64","tax_code_hu_vat_position","FALSE","-1.0"
|
|
|
@ -0,0 +1,17 @@
|
|||
"id","description","chart_template_id/id","type_tax_use","name","type","amount","account_collected_id/id","account_paid_id/id","base_code_id/id","tax_code_id/id","ref_base_code_id/id","ref_tax_code_id/id","tax_sign","base_sign","ref_base_sign","ref_tax_sign","parent_id:id","sequence","price_include"
|
||||
"F27","27%","hungarian_chart_template","sale","Fizetendő - 27%","percent",0.27,"chart_hu_467","chart_hu_467","tax_code_hu_1011","tax_code_hu_1010","tax_code_hu_1011","tax_code_hu_1010",1,1,-1,-1,,1,"False"
|
||||
"F18","18%","hungarian_chart_template","sale","Fizetendő – 18%","percent",0.18,"chart_hu_467","chart_hu_467","tax_code_hu_1021","tax_code_hu_1020","tax_code_hu_1021","tax_code_hu_1020",1,1,-1,-1,,2,"False"
|
||||
"F5","5%","hungarian_chart_template","sale","Fizetendő – 5%","percent",0.05,"chart_hu_467","chart_hu_467","tax_code_hu_1031","tax_code_hu_1030","tax_code_hu_1031","tax_code_hu_1030",1,1,-1,-1,,2,"False"
|
||||
"FA","AAM","hungarian_chart_template","sale","Fizetendő – Alanyi Adómentes","percent",0,"chart_hu_467","chart_hu_467","tax_code_hu_1041",,"tax_code_hu_1041",,1,1,-1,-1,,2,"False"
|
||||
"FT","TAM","hungarian_chart_template","sale","Fizetendő – Tárgyi Adómentes","percent",0,"chart_hu_467","chart_hu_467","tax_code_hu_1061",,"tax_code_hu_1061",,1,1,-1,-1,,2,"False"
|
||||
"FF","FORD","hungarian_chart_template","sale","Fizetendő – Fordított ÁFA","percent",0,"chart_hu_467","chart_hu_467","tax_code_hu_1081",,"tax_code_hu_1081",,1,1,-1,-1,,2,"False"
|
||||
"FEUO","Export","hungarian_chart_template","sale","Fizetendő – Export","percent",0,"chart_hu_467","chart_hu_467","tax_code_hu_1071",,"tax_code_hu_1071",,1,1,-1,-1,,2,"False"
|
||||
"FEU","EU","hungarian_chart_template","sale","Fizetendő – EU","percent",0,"chart_hu_467","chart_hu_467","tax_code_hu_1051",,"tax_code_hu_1051",,1,1,-1,-1,,2,"False"
|
||||
"V18","18%","hungarian_chart_template","purchase","Visszaigényelhető – 18%","percent",0.18,"chart_hu_466","chart_hu_466","tax_code_hu_1221","tax_code_hu_1220","tax_code_hu_1221","tax_code_hu_1220",1,1,-1,-1,,2,"False"
|
||||
"V27","27%","hungarian_chart_template","purchase","Visszaigényelhető – 27%","percent",0.27,"chart_hu_466","chart_hu_466","tax_code_hu_1211","tax_code_hu_1210","tax_code_hu_1211","tax_code_hu_1210",1,1,-1,-1,,1,"False"
|
||||
"V5","5%","hungarian_chart_template","purchase","Visszaigényelhető – 5%","percent",0.05,"chart_hu_466","chart_hu_466","tax_code_hu_1231","tax_code_hu_1230","tax_code_hu_1231","tax_code_hu_1230",1,1,-1,-1,,2,"False"
|
||||
"VA","AAM","hungarian_chart_template","purchase","Visszaigényelhető – Alanyi Adómentes","percent",0,"chart_hu_466","chart_hu_466","tax_code_hu_1240",,"tax_code_hu_1240",,1,1,-1,-1,,2,"False"
|
||||
"VT","TAM","hungarian_chart_template","purchase","Visszaigényelhető – Tárgyi Adómentes","percent",0,"chart_hu_466","chart_hu_466","tax_code_hu_1260",,"tax_code_hu_1260",,1,1,-1,-1,,2,"False"
|
||||
"VEU","EU","hungarian_chart_template","purchase","Visszaigényelhető – EU","percent",0,"chart_hu_466","chart_hu_466","tax_code_hu_1250",,"tax_code_hu_1250",,1,1,-1,-1,,2,"False"
|
||||
"VEUO","Import","hungarian_chart_template","purchase","Visszaigényelhető – Import","percent",0,"chart_hu_466","chart_hu_466","tax_code_hu_1270",,"tax_code_hu_1270",,1,1,-1,-1,,2,"False"
|
||||
"VF","FORD","hungarian_chart_template","purchase","Visszaigényelhető – Fordított ÁFA","percent",0,"chart_hu_466","chart_hu_466","tax_code_hu_1280",,"tax_code_hu_1280",,1,1,-1,-1,,2,"False"
|
|
|
@ -0,0 +1,22 @@
|
|||
"id","name","bic","country/id","zip","city","street","email","phone","fax"
|
||||
"BKCHHUHBXXX","Bank of China (Hungária) Hitelintézet Rt.","BKCHHUHBXXX","base.hu",1051,"Budapest","József Nádor tér 7.","service_hu@bank-of-china.com","+3614299200","+3614299201"
|
||||
"BNPAHUHX","BNP Paribas Hungária Bank Rt.","BNPAHUHX","base.hu",1051,"Budapest","Széchenyi István tér 7-8.",,"+3613746300",
|
||||
"BUDAHUHB","Budapest Hitel- és Fejlesztési Bank Rt.","BUDAHUHB","base.hu",1138,"Budapest","Váci út 188."," info@budapestbank.hu","+3614506060","+3614506062"
|
||||
"CIBHHUHB","CIB Közép-Európai Nemzetközi Bank Zrt.","CIBHHUHB","base.hu",1027,"Budapest","Medve utca 4-14.","cib@cib.hu","+3614231000",
|
||||
"CITIHUHX","Citibank Rt.","CITIHUHX","base.hu",1051,"Budapest","Szabadság tér 7.",,"+3613745000","+3613745100"
|
||||
"COBAHUHX","Commerzbank Zártkörűen Működő Rt.","COBAHUHX","base.hu",1054,"Budapest","Széchenyi rakpart 8.","info.budapest@commerzbank.com","+3613748100","+3612694574"
|
||||
"DEUTHU2B","Deutsche Bank Zártkörűen Működő Rt.","DEUTHU2B","base.hu",1054,"Budapest","Hold utca 27.","db.hungary@db.com","+3613013700","+3612693239"
|
||||
"GIBAHUHB","ERSTE Bank Hungary Zrt.","GIBAHUHB","base.hu",1138,"Budapest","Népfürdő u. 24-26.","erste@erstebank.hu","+3640222221","+3612194766"
|
||||
"FHKBHUHB","FHB Kereskedelmi Bank Zrt.","FHKBHUHB","base.hu",1082,"Budapest","Üllői út 48."," info@fhb.hu","+3614529100","+3614529200"
|
||||
"GNBAHUHB","Gránit Bank Zrt.","GNBAHUHB","base.hu",1095,"Budapest","Lechner Ödön fasor 8.","info@granitbank.hu","+3640100777","+3612355906"
|
||||
"INCNHUHB","IC Bank Rt.","INCNHUHB","base.hu",1088,"Budapest","Rákóczi út 1-3."," level@bancopopolare.hu ","+3640200515","+3612666815"
|
||||
"INGBHUHB","ING Bank N.V. Magyarországi Fióktelepe","INGBHUHB","base.hu",1068,"Budapest","Dózsa György út 84.","communications.hu@ingbank.com","+362680140","+362680159"
|
||||
"OKHBHUHB","K&H Bank Zrt.","OKHBHUHB","base.hu",1095,"Budapest","Lechner Ödön fasor 9."," bank@kh.hu ","+3613289000","+3613289696"
|
||||
"HBWEHUHB","MagNet Magyar Közösségi Bank Zrt.","HBWEHUHB","base.hu",1062,"Budapest","Andrássy utca 98.","info@magnetbank.hu","+3614288888","+3614288889"
|
||||
"MANEHUHB","Magyar Nemzeti Bank","MANEHUHB","base.hu",1054,"Budapest","Szabadság tér 8-9.","info@mnb.hu","+3614282600","+3614298000"
|
||||
"MKKBHUHB","MKB Bank Zrt.","MKKBHUHB","base.hu",1056,"Budapest","Váci utca 38.","telebankar@mkb.hu","+3613278600","+3613278700"
|
||||
"OTPVHUHB","OTP Bank Nyrt.","OTPVHUHB","base.hu",1051,"Budapest","Nádor utca 16.",,"+3614735000","+3614735955"
|
||||
"UBRTHUHB","RAIFFEISEN Bank Zrt.","UBRTHUHB","base.hu",1054,"Budapest","Akadémia utca 6.",,"+3640484848",
|
||||
"MAVOHUHB","Sberbank Magyarország Zrt.","MAVOHUHB","base.hu",1088,"Budapest","Rákóczi út 7.","info@sberbank.hu","+3614114200","+3613286660"
|
||||
"TAKBHUHB","TakarékBank Zrt.","TAKBHUHB","base.hu",1122,"Budapest","Pethényi köz 10.","info@tbank.hu","+3612023777",
|
||||
"BACXHUHB","UniCredit Bank Hungary Zrt.","BACXHUHB","base.hu",1054,"Budapest","Szabadság tér 5-6.","info@unicreditgroup.hu","+3613011271","+3613534959"
|
|
|
@ -175,6 +175,11 @@ class mail_notification(osv.Model):
|
|||
# compute email references
|
||||
references = message.parent_id.message_id if message.parent_id else False
|
||||
|
||||
# custom values
|
||||
custom_values = dict()
|
||||
if message.model and message.res_id and self.pool.get(message.model) and hasattr(self.pool[message.model], 'message_get_email_values'):
|
||||
custom_values = self.pool[message.model].message_get_email_values(cr, uid, message.res_id, message, context=context)
|
||||
|
||||
# create email values
|
||||
max_recipients = 50
|
||||
chunks = [email_pids[x:x + max_recipients] for x in xrange(0, len(email_pids), max_recipients)]
|
||||
|
@ -187,6 +192,7 @@ class mail_notification(osv.Model):
|
|||
'recipient_ids': [(4, id) for id in chunk],
|
||||
'references': references,
|
||||
}
|
||||
mail_values.update(custom_values)
|
||||
email_ids.append(self.pool.get('mail.mail').create(cr, uid, mail_values, context=context))
|
||||
if force_send and len(chunks) < 2: # for more than 50 followers, use the queue system
|
||||
self.pool.get('mail.mail').send(cr, uid, email_ids, context=context)
|
||||
|
|
|
@ -23,6 +23,7 @@ import openerp
|
|||
import openerp.tools as tools
|
||||
from openerp.osv import osv
|
||||
from openerp.osv import fields
|
||||
from openerp.tools.safe_eval import safe_eval as eval
|
||||
from openerp import SUPERUSER_ID
|
||||
|
||||
|
||||
|
@ -215,12 +216,13 @@ class mail_group(osv.Model):
|
|||
def message_get_email_values(self, cr, uid, id, notif_mail=None, context=None):
|
||||
res = super(mail_group, self).message_get_email_values(cr, uid, id, notif_mail=notif_mail, context=context)
|
||||
group = self.browse(cr, uid, id, context=context)
|
||||
res.update({
|
||||
'headers': {
|
||||
'Precedence': 'list',
|
||||
}
|
||||
})
|
||||
if group.alias_domain:
|
||||
res['headers']['List-Id'] = '%s.%s' % (group.alias_name, group.alias_domain)
|
||||
res['headers']['List-Post'] = '<mailto:%s@%s>' % (group.alias_name, group.alias_domain)
|
||||
try:
|
||||
headers = eval(res.get('headers', '{}'))
|
||||
except Exception:
|
||||
headers = {}
|
||||
headers['Precedence'] = 'list'
|
||||
if group.alias_domain and group.alias_name:
|
||||
headers['List-Id'] = '%s.%s' % (group.alias_name, group.alias_domain)
|
||||
headers['List-Post'] = '<mailto:%s@%s>' % (group.alias_name, group.alias_domain)
|
||||
res['headers'] = '%s' % headers
|
||||
return res
|
||||
|
|
|
@ -22,13 +22,13 @@
|
|||
import base64
|
||||
import logging
|
||||
import re
|
||||
from urllib import urlencode
|
||||
from urlparse import urljoin
|
||||
|
||||
from openerp import tools
|
||||
from openerp import SUPERUSER_ID
|
||||
from openerp.addons.base.ir.ir_mail_server import MailDeliveryException
|
||||
from openerp.osv import fields, osv
|
||||
from openerp.tools.safe_eval import safe_eval as eval
|
||||
from openerp.tools.translate import _
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
@ -59,6 +59,7 @@ class mail_mail(osv.Model):
|
|||
'recipient_ids': fields.many2many('res.partner', string='To (Partners)'),
|
||||
'email_cc': fields.char('Cc', help='Carbon copy message recipients'),
|
||||
'body_html': fields.text('Rich-text Contents', help="Rich-text/HTML message"),
|
||||
'headers': fields.text('Headers'),
|
||||
# Auto-detected based on create() - if 'mail_message_id' was passed then this mail is a notification
|
||||
# and during unlink() we will not cascade delete the parent and its attachments
|
||||
'notification': fields.boolean('Is Notification',
|
||||
|
@ -67,6 +68,7 @@ class mail_mail(osv.Model):
|
|||
|
||||
_defaults = {
|
||||
'state': 'outgoing',
|
||||
'headers': '{}',
|
||||
}
|
||||
|
||||
def default_get(self, cr, uid, fields, context=None):
|
||||
|
@ -186,11 +188,8 @@ class mail_mail(osv.Model):
|
|||
- if 'partner' and mail is a notification on a document: followers (Followers of 'Doc' <email>)
|
||||
- elif 'partner', no notificatoin or no doc: recipient specific (Partner Name <email>)
|
||||
- else fallback on mail.email_to splitting """
|
||||
if partner and mail.notification and mail.record_name:
|
||||
sanitized_record_name = re.sub(r'[^\w+.]+', '-', mail.record_name)
|
||||
email_to = [_('"Followers of %s" <%s>') % (sanitized_record_name, partner.email)]
|
||||
elif partner:
|
||||
email_to = ['%s <%s>' % (partner.name, partner.email)]
|
||||
if partner:
|
||||
email_to = ['"%s" <%s>' % (partner.name, partner.email)]
|
||||
else:
|
||||
email_to = tools.email_split(mail.email_to)
|
||||
return email_to
|
||||
|
@ -210,8 +209,6 @@ class mail_mail(osv.Model):
|
|||
'subject': self.send_get_mail_subject(cr, uid, mail, partner=partner, context=context),
|
||||
'email_to': self.send_get_mail_to(cr, uid, mail, partner=partner, context=context),
|
||||
}
|
||||
if mail.model and mail.res_id and self.pool.get(mail.model) and hasattr(self.pool[mail.model], 'message_get_email_values'):
|
||||
res.update(self.pool[mail.model].message_get_email_values(cr, uid, mail.res_id, mail, context=context))
|
||||
return res
|
||||
|
||||
def send(self, cr, uid, ids, auto_commit=False, raise_exception=False, context=None):
|
||||
|
@ -267,13 +264,15 @@ class mail_mail(osv.Model):
|
|||
headers['Return-Path'] = '%s-%d-%s-%d@%s' % (bounce_alias, mail.id, mail.model, mail.res_id, catchall_domain)
|
||||
else:
|
||||
headers['Return-Path'] = '%s-%d@%s' % (bounce_alias, mail.id, catchall_domain)
|
||||
if mail.headers:
|
||||
try:
|
||||
headers.update(eval(mail.headers))
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
# build an RFC2822 email.message.Message object and send it without queuing
|
||||
res = None
|
||||
for email in email_list:
|
||||
email_headers = dict(headers)
|
||||
if email.get('headers'):
|
||||
email_headers.update(email['headers'])
|
||||
msg = ir_mail_server.build_email(
|
||||
email_from=mail.email_from,
|
||||
email_to=email.get('email_to'),
|
||||
|
@ -288,7 +287,7 @@ class mail_mail(osv.Model):
|
|||
object_id=mail.res_id and ('%s-%s' % (mail.res_id, mail.model)),
|
||||
subtype='html',
|
||||
subtype_alternative='plain',
|
||||
headers=email_headers)
|
||||
headers=headers)
|
||||
res = ir_mail_server.send_email(cr, uid, msg,
|
||||
mail_server_id=mail.mail_server_id.id,
|
||||
context=context)
|
||||
|
|
|
@ -34,26 +34,19 @@
|
|||
</page>
|
||||
<page string="Advanced" groups="base.group_no_one">
|
||||
<group>
|
||||
<div>
|
||||
<group string="Status">
|
||||
<field name="auto_delete"/>
|
||||
<field name="notification"/>
|
||||
<field name="type"/>
|
||||
<field name="mail_server_id"/>
|
||||
<field name="model"/>
|
||||
<field name="res_id"/>
|
||||
</group>
|
||||
</div>
|
||||
<div>
|
||||
<group string="Headers">
|
||||
<field name="message_id"/>
|
||||
<field name="references"/>
|
||||
</group>
|
||||
<group string="Recipients">
|
||||
<field name="partner_ids" widget="many2many_tags"/>
|
||||
<field name="notified_partner_ids" widget="many2many_tags"/>
|
||||
</group>
|
||||
</div>
|
||||
<group string="Status">
|
||||
<field name="auto_delete"/>
|
||||
<field name="notification"/>
|
||||
<field name="type"/>
|
||||
<field name="mail_server_id"/>
|
||||
<field name="model"/>
|
||||
<field name="res_id"/>
|
||||
</group>
|
||||
<group string="Headers">
|
||||
<field name="message_id"/>
|
||||
<field name="references"/>
|
||||
<field name="headers"/>
|
||||
</group>
|
||||
</group>
|
||||
</page>
|
||||
<page string="Attachments">
|
||||
|
|
|
@ -20,7 +20,6 @@
|
|||
##############################################################################
|
||||
|
||||
import logging
|
||||
import re
|
||||
|
||||
from openerp import tools
|
||||
|
||||
|
@ -131,6 +130,8 @@ class mail_message(osv.Model):
|
|||
help="Email address of the sender. This field is set when no matching partner is found for incoming emails."),
|
||||
'reply_to': fields.char('Reply-To',
|
||||
help='Reply email address. Setting the reply_to bypasses the automatic thread creation.'),
|
||||
'same_thread': fields.boolean('Same thread',
|
||||
help='Redirect answers to the same discussion thread.'),
|
||||
'author_id': fields.many2one('res.partner', 'Author', select=1,
|
||||
ondelete='set null',
|
||||
help="Author of the message. If not set, email_from may hold an email address that did not match any partner."),
|
||||
|
@ -188,6 +189,7 @@ class mail_message(osv.Model):
|
|||
'author_id': lambda self, cr, uid, ctx=None: self._get_default_author(cr, uid, ctx),
|
||||
'body': '',
|
||||
'email_from': lambda self, cr, uid, ctx=None: self._get_default_from(cr, uid, ctx),
|
||||
'same_thread': True,
|
||||
}
|
||||
|
||||
#------------------------------------------------------
|
||||
|
@ -766,42 +768,12 @@ class mail_message(osv.Model):
|
|||
""" Return a specific reply_to: alias of the document through message_get_reply_to
|
||||
or take the email_from
|
||||
"""
|
||||
email_reply_to = None
|
||||
|
||||
ir_config_parameter = self.pool.get("ir.config_parameter")
|
||||
catchall_domain = ir_config_parameter.get_param(cr, uid, "mail.catchall.domain", context=context)
|
||||
|
||||
# model, res_id, email_from: comes from values OR related message
|
||||
model, res_id, email_from = values.get('model'), values.get('res_id'), values.get('email_from')
|
||||
|
||||
# if model and res_id: try to use ``message_get_reply_to`` that returns the document alias
|
||||
if not email_reply_to and model and res_id and catchall_domain and hasattr(self.pool[model], 'message_get_reply_to'):
|
||||
email_reply_to = self.pool[model].message_get_reply_to(cr, uid, [res_id], context=context)[0]
|
||||
# no alias reply_to -> catchall alias
|
||||
if not email_reply_to and catchall_domain:
|
||||
catchall_alias = ir_config_parameter.get_param(cr, uid, "mail.catchall.alias", context=context)
|
||||
if catchall_alias:
|
||||
email_reply_to = '%s@%s' % (catchall_alias, catchall_domain)
|
||||
# still no reply_to -> reply_to will be the email_from
|
||||
if not email_reply_to and email_from:
|
||||
email_reply_to = email_from
|
||||
|
||||
# format 'Document name <email_address>'
|
||||
if email_reply_to and model and res_id:
|
||||
emails = tools.email_split(email_reply_to)
|
||||
if emails:
|
||||
email_reply_to = emails[0]
|
||||
document_name = self.pool[model].name_get(cr, SUPERUSER_ID, [res_id], context=context)[0]
|
||||
if document_name:
|
||||
# sanitize document name
|
||||
sanitized_doc_name = re.sub(r'[^\w+.]+', '-', document_name[1])
|
||||
# generate reply to
|
||||
email_reply_to = _('"Followers of %s" <%s>') % (sanitized_doc_name, email_reply_to)
|
||||
|
||||
return email_reply_to
|
||||
ctx = dict(context, thread_model=model)
|
||||
return self.pool['mail.thread'].message_get_reply_to(cr, uid, [res_id], default=email_from, context=ctx)[res_id]
|
||||
|
||||
def _get_message_id(self, cr, uid, values, context=None):
|
||||
if values.get('reply_to'):
|
||||
if values.get('same_thread', True) is False:
|
||||
message_id = tools.generate_tracking_message_id('reply_to')
|
||||
elif values.get('res_id') and values.get('model'):
|
||||
message_id = tools.generate_tracking_message_id('%(res_id)s-%(model)s' % values)
|
||||
|
|
|
@ -31,6 +31,7 @@ except ImportError:
|
|||
from lxml import etree
|
||||
import logging
|
||||
import pytz
|
||||
import re
|
||||
import socket
|
||||
import time
|
||||
import xmlrpclib
|
||||
|
@ -688,22 +689,54 @@ class mail_thread(osv.AbstractModel):
|
|||
res[record.id] = {'partner_ids': list(recipient_ids), 'email_to': email_to, 'email_cc': email_cc}
|
||||
return res
|
||||
|
||||
def message_get_reply_to(self, cr, uid, ids, context=None):
|
||||
def message_get_reply_to(self, cr, uid, ids, default=None, context=None):
|
||||
""" Returns the preferred reply-to email address that is basically
|
||||
the alias of the document, if it exists. """
|
||||
if not self._inherits.get('mail.alias'):
|
||||
return [False for id in ids]
|
||||
return ["%s@%s" % (record.alias_name, record.alias_domain)
|
||||
if record.alias_domain and record.alias_name else False
|
||||
for record in self.browse(cr, SUPERUSER_ID, ids, context=context)]
|
||||
if context is None:
|
||||
context = {}
|
||||
model_name = context.get('thread_model') or self._name
|
||||
alias_domain = self.pool['ir.config_parameter'].get_param(cr, uid, "mail.catchall.domain", context=context)
|
||||
res = dict.fromkeys(ids, False)
|
||||
|
||||
# alias domain: check for aliases and catchall
|
||||
aliases = {}
|
||||
doc_names = {}
|
||||
if alias_domain:
|
||||
if model_name and model_name != 'mail.thread':
|
||||
alias_ids = self.pool['mail.alias'].search(
|
||||
cr, SUPERUSER_ID, [
|
||||
('alias_parent_model_id.model', '=', model_name),
|
||||
('alias_parent_thread_id', 'in', ids),
|
||||
('alias_name', '!=', False)
|
||||
], context=context)
|
||||
aliases.update(
|
||||
dict((alias.alias_parent_thread_id, '%s@%s' % (alias.alias_name, alias_domain))
|
||||
for alias in self.pool['mail.alias'].browse(cr, SUPERUSER_ID, alias_ids, context=context)))
|
||||
doc_names.update(
|
||||
dict((ng_res[0], ng_res[1])
|
||||
for ng_res in self.pool[model_name].name_get(cr, SUPERUSER_ID, aliases.keys(), context=context)))
|
||||
# left ids: use catchall
|
||||
left_ids = set(ids).difference(set(aliases.keys()))
|
||||
if left_ids:
|
||||
catchall_alias = self.pool['ir.config_parameter'].get_param(cr, uid, "mail.catchall.alias", context=context)
|
||||
if catchall_alias:
|
||||
aliases.update(dict((res_id, '%s@%s' % (catchall_alias, alias_domain)) for res_id in left_ids))
|
||||
# compute name of reply-to
|
||||
company_name = self.pool['res.users'].browse(cr, SUPERUSER_ID, uid, context=context).company_id.name
|
||||
res.update(
|
||||
dict((res_id, '"%(company_name)s%(document_name)s" <%(email)s>' %
|
||||
{'company_name': company_name,
|
||||
'document_name': doc_names.get(res_id) and ' ' + re.sub(r'[^\w+.]+', '-', doc_names[res_id]) or '',
|
||||
'email': aliases[res_id]
|
||||
} or False) for res_id in aliases.keys()))
|
||||
left_ids = set(ids).difference(set(aliases.keys()))
|
||||
if left_ids and default:
|
||||
res.update(dict((res_id, default) for res_id in left_ids))
|
||||
return res
|
||||
|
||||
def message_get_email_values(self, cr, uid, id, notif_mail=None, context=None):
|
||||
""" Temporary method to create custom notification email values for a given
|
||||
model and document. This should be better to have a headers field on
|
||||
the mail.mail model, computed when creating the notification email, but
|
||||
this cannot be done in a stable version.
|
||||
|
||||
TDE FIXME: rethink this ulgy thing. """
|
||||
""" Get specific notification email values to store on the notification
|
||||
mail_mail. Void method, inherit it to add custom values. """
|
||||
res = dict()
|
||||
return res
|
||||
|
||||
|
|
|
@ -449,8 +449,8 @@ class test_mail(TestMail):
|
|||
'message_post: mail.mail notifications should have been auto-deleted!')
|
||||
|
||||
# Test: notifications emails: to a and b, c is email only, r is author
|
||||
# test_emailto = ['Administrator <a@a>', 'Bert Tartopoils <b@b>']
|
||||
test_emailto = ['"Followers of -Pigs-" <a@a>', '"Followers of -Pigs-" <b@b>']
|
||||
test_emailto = ['"Administrator" <a@a>', '"Bert Tartopoils" <b@b>']
|
||||
# test_emailto = ['"Followers of -Pigs-" <a@a>', '"Followers of -Pigs-" <b@b>']
|
||||
self.assertEqual(len(sent_emails), 2,
|
||||
'message_post: notification emails wrong number of send emails')
|
||||
self.assertEqual(set([m['email_to'][0] for m in sent_emails]), set(test_emailto),
|
||||
|
@ -462,7 +462,7 @@ class test_mail(TestMail):
|
|||
'message_post: notification email sent to more than one email address instead of a precise partner')
|
||||
self.assertIn(sent_email['email_to'][0], test_emailto,
|
||||
'message_post: notification email email_to incorrect')
|
||||
self.assertEqual(sent_email['reply_to'], '"Followers of -Pigs-" <group+pigs@schlouby.fr>',
|
||||
self.assertEqual(sent_email['reply_to'], '"YourCompany -Pigs-" <group+pigs@schlouby.fr>',
|
||||
'message_post: notification email reply_to incorrect')
|
||||
self.assertEqual(_subject, sent_email['subject'],
|
||||
'message_post: notification email subject incorrect')
|
||||
|
@ -523,8 +523,8 @@ class test_mail(TestMail):
|
|||
self.assertFalse(self.mail_mail.search(cr, uid, [('mail_message_id', '=', msg2_id)]), 'mail.mail notifications should have been auto-deleted!')
|
||||
|
||||
# Test: emails send by server (to a, b, c, d)
|
||||
# test_emailto = [u'Administrator <a@a>', u'Bert Tartopoils <b@b>', u'Carine Poilvache <c@c>', u'D\xe9d\xe9 Grosbedon <d@d>']
|
||||
test_emailto = [u'"Followers of Pigs" <a@a>', u'"Followers of Pigs" <b@b>', u'"Followers of Pigs" <c@c>', u'"Followers of Pigs" <d@d>']
|
||||
test_emailto = [u'"Administrator" <a@a>', u'"Bert Tartopoils" <b@b>', u'"Carine Poilvache" <c@c>', u'"D\xe9d\xe9 Grosbedon" <d@d>']
|
||||
# test_emailto = [u'"Followers of Pigs" <a@a>', u'"Followers of Pigs" <b@b>', u'"Followers of Pigs" <c@c>', u'"Followers of Pigs" <d@d>']
|
||||
# self.assertEqual(len(sent_emails), 3, 'sent_email number of sent emails incorrect')
|
||||
for sent_email in sent_emails:
|
||||
self.assertEqual(sent_email['email_from'], 'Raoul Grosbedon <r@r>',
|
||||
|
|
|
@ -81,8 +81,7 @@ class TestMailMessage(TestMail):
|
|||
alias_domain = 'schlouby.fr'
|
||||
raoul_from = 'Raoul Grosbedon <raoul@raoul.fr>'
|
||||
raoul_from_alias = 'Raoul Grosbedon <raoul@schlouby.fr>'
|
||||
raoul_reply = '"Followers of Pigs" <raoul@raoul.fr>'
|
||||
raoul_reply_alias = '"Followers of Pigs" <group+pigs@schlouby.fr>'
|
||||
raoul_reply_alias = '"YourCompany Pigs" <group+pigs@schlouby.fr>'
|
||||
|
||||
# --------------------------------------------------
|
||||
# Case1: without alias_domain
|
||||
|
@ -91,7 +90,7 @@ class TestMailMessage(TestMail):
|
|||
self.registry('ir.config_parameter').unlink(cr, uid, param_ids)
|
||||
|
||||
# Do: free message; specified values > default values
|
||||
msg_id = self.mail_message.create(cr, user_raoul_id, {'reply_to': reply_to1, 'email_from': email_from1})
|
||||
msg_id = self.mail_message.create(cr, user_raoul_id, {'same_thread': False, 'reply_to': reply_to1, 'email_from': email_from1})
|
||||
msg = self.mail_message.browse(cr, user_raoul_id, msg_id)
|
||||
# Test: message content
|
||||
self.assertIn('reply_to', msg.message_id,
|
||||
|
@ -118,7 +117,7 @@ class TestMailMessage(TestMail):
|
|||
'mail_message: message_id should contain model')
|
||||
self.assertIn('%s' % self.group_pigs_id, msg.message_id,
|
||||
'mail_message: message_id should contain res_id')
|
||||
self.assertEqual(msg.reply_to, raoul_reply,
|
||||
self.assertEqual(msg.reply_to, raoul_from,
|
||||
'mail_message: incorrect reply_to: should be Raoul')
|
||||
self.assertEqual(msg.email_from, raoul_from,
|
||||
'mail_message: incorrect email_from: should be Raoul')
|
||||
|
@ -152,7 +151,7 @@ class TestMailMessage(TestMail):
|
|||
msg_id = self.mail_message.create(cr, user_raoul_id, {})
|
||||
msg = self.mail_message.browse(cr, user_raoul_id, msg_id)
|
||||
# Test: generated reply_to
|
||||
self.assertEqual(msg.reply_to, 'gateway@schlouby.fr',
|
||||
self.assertEqual(msg.reply_to, '"YourCompany" <gateway@schlouby.fr>',
|
||||
'mail_mail: reply_to should equal the catchall email alias')
|
||||
|
||||
# Do: create a mail_mail
|
||||
|
|
|
@ -121,16 +121,12 @@ class mail_compose_message(osv.TransientModel):
|
|||
# mass mode options
|
||||
'notify': fields.boolean('Notify followers',
|
||||
help='Notify followers of the document (mass post only)'),
|
||||
'same_thread': fields.boolean('Replies in the document',
|
||||
help='Replies to the messages will go into the selected document (mass mail only)'),
|
||||
}
|
||||
#TODO change same_thread to False in trunk (Require view update)
|
||||
_defaults = {
|
||||
'composition_mode': 'comment',
|
||||
'body': lambda self, cr, uid, ctx={}: '',
|
||||
'subject': lambda self, cr, uid, ctx={}: False,
|
||||
'partner_ids': lambda self, cr, uid, ctx={}: [],
|
||||
'same_thread': True,
|
||||
}
|
||||
|
||||
def check_access_rule(self, cr, uid, ids, operation, context=None):
|
||||
|
@ -251,6 +247,10 @@ class mail_compose_message(osv.TransientModel):
|
|||
# render all template-based value at once
|
||||
if mass_mail_mode and wizard.model:
|
||||
rendered_values = self.render_message_batch(cr, uid, wizard, res_ids, context=context)
|
||||
# compute alias-based reply-to in batch
|
||||
reply_to_value = dict.fromkeys(res_ids, None)
|
||||
if mass_mail_mode and wizard.same_thread:
|
||||
reply_to_value = self.pool['mail.thread'].message_get_reply_to(cr, uid, res_ids, default=wizard.email_from, context=dict(context, thread_model=wizard.model))
|
||||
|
||||
for res_id in res_ids:
|
||||
# static wizard (mail.message) values
|
||||
|
@ -277,7 +277,9 @@ class mail_compose_message(osv.TransientModel):
|
|||
mail_values.update(email_dict)
|
||||
if wizard.same_thread:
|
||||
mail_values.pop('reply_to')
|
||||
elif not mail_values.get('reply_to'):
|
||||
if reply_to_value.get(res_id):
|
||||
mail_values['reply_to'] = reply_to_value[res_id]
|
||||
if not wizard.same_thread and not mail_values.get('reply_to'):
|
||||
mail_values['reply_to'] = mail_values['email_from']
|
||||
# mail_mail values: body -> body_html, partner_ids -> recipient_ids
|
||||
mail_values['body_html'] = mail_values.get('body', '')
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink
|
||||
access_issues,project_issue,project_issue.model_project_issue,base.group_portal,1,0,0,0
|
||||
access_case_section,crm_case_section,crm.model_crm_case_section,base.group_portal,1,0,0,0
|
||||
access_case_section,crm_case_section,sales_team.model_crm_case_section,base.group_portal,1,0,0,0
|
||||
access_issues_public,project_issue,project_issue.model_project_issue,base.group_public,1,0,0,0
|
|
|
@ -1099,8 +1099,10 @@ class task(osv.osv):
|
|||
|
||||
def message_get_reply_to(self, cr, uid, ids, context=None):
|
||||
""" Override to get the reply_to of the parent project. """
|
||||
return [task.project_id.message_get_reply_to()[0] if task.project_id else False
|
||||
for task in self.browse(cr, uid, ids, context=context)]
|
||||
tasks = self.browse(cr, SUPERUSER_ID, ids, context=context)
|
||||
project_ids = set([task.project_id.id for task in tasks if task.project_id])
|
||||
aliases = self.pool['project.project'].message_get_reply_to(cr, uid, list(project_ids), context=context)
|
||||
return dict((task.id, aliases.get(task.project_id and task.project_id.id or 0, False)) for task in tasks)
|
||||
|
||||
def message_new(self, cr, uid, msg, custom_values=None, context=None):
|
||||
""" Override to updates the document according to the email. """
|
||||
|
|
|
@ -37,7 +37,7 @@ It allows the manager to quickly check the issues, assign them and decide on the
|
|||
'website': 'http://www.openerp.com',
|
||||
'images': ['images/issue_analysis.jpeg','images/project_issue.jpeg'],
|
||||
'depends': [
|
||||
'crm',
|
||||
'sales_team',
|
||||
'project',
|
||||
],
|
||||
'data': [
|
||||
|
|
|
@ -23,7 +23,6 @@ from datetime import datetime
|
|||
|
||||
from openerp import SUPERUSER_ID
|
||||
from openerp import tools
|
||||
from openerp.addons.crm import crm
|
||||
from openerp.osv import fields, osv, orm
|
||||
from openerp.tools import html2plaintext
|
||||
from openerp.tools.translate import _
|
||||
|
@ -259,7 +258,7 @@ class project_issue(osv.Model):
|
|||
'date_closed': fields.datetime('Closed', readonly=True,select=True),
|
||||
'date': fields.datetime('Date'),
|
||||
'date_last_stage_update': fields.datetime('Last Stage Update', select=True),
|
||||
'channel_id': fields.many2one('crm.case.channel', 'Channel', help="Communication channel."),
|
||||
'channel': fields.char('Channel', help="Communication channel."),
|
||||
'categ_ids': fields.many2many('project.category', string='Tags'),
|
||||
'priority': fields.selection([('0','Low'), ('1','Normal'), ('2','High')], 'Priority', select=True),
|
||||
'version_id': fields.many2one('project.issue.version', 'Version'),
|
||||
|
@ -414,8 +413,10 @@ class project_issue(osv.Model):
|
|||
|
||||
def message_get_reply_to(self, cr, uid, ids, context=None):
|
||||
""" Override to get the reply_to of the parent project. """
|
||||
return [issue.project_id.message_get_reply_to()[0] if issue.project_id else False
|
||||
for issue in self.browse(cr, uid, ids, context=context)]
|
||||
issues = self.browse(cr, SUPERUSER_ID, ids, context=context)
|
||||
project_ids = set([issue.project_id.id for issue in issues if issue.project_id])
|
||||
aliases = self.pool['project.project'].message_get_reply_to(cr, uid, list(project_ids), context=context)
|
||||
return dict((issue.id, aliases.get(issue.project_id and issue.project_id.id or 0, False)) for issue in issues)
|
||||
|
||||
def message_get_suggested_recipients(self, cr, uid, ids, context=None):
|
||||
recipients = super(project_issue, self).message_get_suggested_recipients(cr, uid, ids, context=context)
|
||||
|
|
|
@ -52,7 +52,7 @@ class project_issue_report(osv.osv):
|
|||
'version_id': fields.many2one('project.issue.version', 'Version'),
|
||||
'user_id' : fields.many2one('res.users', 'Assigned to',readonly=True),
|
||||
'partner_id': fields.many2one('res.partner','Contact'),
|
||||
'channel_id': fields.many2one('crm.case.channel', 'Channel',readonly=True),
|
||||
'channel': fields.char('Channel', readonly=True, help="Communication Channel."),
|
||||
'task_id': fields.many2one('project.task', 'Task'),
|
||||
'email': fields.integer('# Emails', size=128, readonly=True),
|
||||
}
|
||||
|
@ -81,7 +81,7 @@ class project_issue_report(osv.osv):
|
|||
c.version_id as version_id,
|
||||
1 as nbr,
|
||||
c.partner_id,
|
||||
c.channel_id,
|
||||
c.channel,
|
||||
c.task_id,
|
||||
date_trunc('day',c.create_date) as create_date,
|
||||
c.day_open as delay_open,
|
||||
|
|
|
@ -5,6 +5,6 @@ access_project_issue_version_project,project_issue_version manager,model_project
|
|||
access_project_issue_version_project_user,project_issue_version user,model_project_issue_version,project.group_project_user,1,0,0,0
|
||||
access_resource_calendar_project_manager,resource.calendar.project.manager,resource.model_resource_calendar,project.group_project_manager,1,1,1,1
|
||||
access_project_issue_report_user,project.issue.report user,model_project_issue_report,project.group_project_user,1,0,0,0
|
||||
access_crm_case_section,crm.case.section,crm.model_crm_case_section,project.group_project_user,1,0,0,0
|
||||
access_crm_case_section,crm.case.section,sales_team.model_crm_case_section,project.group_project_user,1,0,0,0
|
||||
access_project_issue_salesman,project.issue,model_project_issue,base.group_sale_salesman,1,0,0,0
|
||||
access_project_issue_manager,project.issue,model_project_issue,base.group_sale_manager,1,0,0,0
|
||||
|
|
|
|
@ -21,6 +21,17 @@ instance.web.serialize_sort = function (criterion) {
|
|||
}).join(', ');
|
||||
};
|
||||
|
||||
/**
|
||||
* Reverse of the serialize_sort function: convert an array of SQL-like sort
|
||||
* descriptors into a list of fields prefixed with '-' if necessary.
|
||||
*/
|
||||
instance.web.deserialize_sort = function (criterion) {
|
||||
return _.map(criterion, function (criteria) {
|
||||
var split = _.without(criteria.split(' '), '');
|
||||
return (split[1] && split[1].toLowerCase() === 'desc' ? '-' : '') + split[0];
|
||||
});
|
||||
};
|
||||
|
||||
instance.web.Query = instance.web.Class.extend({
|
||||
init: function (model, fields) {
|
||||
this._model = model;
|
||||
|
@ -685,6 +696,15 @@ instance.web.DataSet = instance.web.Class.extend(instance.web.PropertiesMixin,
|
|||
this._sort.unshift((reverse ? '-' : '') + field);
|
||||
return undefined;
|
||||
},
|
||||
/**
|
||||
* Set the sort criteria on the dataset.
|
||||
*
|
||||
* @param {Array} fields_list: list of fields order descriptors, as used by
|
||||
* Odoo's ORM (such as 'name desc', 'product_id', 'order_date asc')
|
||||
*/
|
||||
set_sort: function (fields_list) {
|
||||
this._sort = instance.web.deserialize_sort(fields_list);
|
||||
},
|
||||
size: function () {
|
||||
return this.ids.length;
|
||||
},
|
||||
|
|
|
@ -354,6 +354,12 @@ instance.web.ListView = instance.web.View.extend( /** @lends instance.web.ListVi
|
|||
this.sidebar.$el.hide();
|
||||
}
|
||||
//Sort
|
||||
var default_order = this.fields_view.arch.attrs.default_order,
|
||||
unsorted = !this.dataset._sort.length;
|
||||
if (unsorted && default_order) {
|
||||
this.dataset.set_sort(default_order.split(','));
|
||||
}
|
||||
|
||||
if(this.dataset._sort.length){
|
||||
if(this.dataset._sort[0].indexOf('-') == -1){
|
||||
this.$el.find('th[data-id=' + this.dataset._sort[0] + ']').addClass("sortdown");
|
||||
|
|
|
@ -325,59 +325,6 @@ openerp.web_calendar = function(instance) {
|
|||
firstDay: translate.firstDay,
|
||||
});
|
||||
|
||||
|
||||
if (this.useContacts) {
|
||||
//Get my Partner ID
|
||||
|
||||
new instance.web.Model("res.users").query(["partner_id"]).filter([["id", "=",this.dataset.context.uid]]).first()
|
||||
.done(
|
||||
function(result) {
|
||||
var sidebar_items = {};
|
||||
var filter_value = result.partner_id[0];
|
||||
var filter_item = {
|
||||
value: filter_value,
|
||||
label: result.partner_id[1] + _lt(" [Me]"),
|
||||
color: self.get_color(filter_value),
|
||||
avatar_model: self.avatar_model,
|
||||
is_checked: true
|
||||
};
|
||||
|
||||
sidebar_items[filter_value] = filter_item ;
|
||||
filter_item = {
|
||||
value: -1,
|
||||
label: _lt("Everybody's calendars"),
|
||||
color: self.get_color(-1),
|
||||
avatar_model: self.avatar_model,
|
||||
is_checked: false
|
||||
};
|
||||
sidebar_items[-1] = filter_item ;
|
||||
//Get my coworkers/contacts
|
||||
new instance.web.Model("calendar.contacts").query(["partner_id"]).filter([["user_id", "=",self.dataset.context.uid]]).all().then(function(result) {
|
||||
_.each(result, function(item) {
|
||||
filter_value = item.partner_id[0];
|
||||
filter_item = {
|
||||
value: filter_value,
|
||||
label: item.partner_id[1],
|
||||
color: self.get_color(filter_value),
|
||||
avatar_model: self.avatar_model,
|
||||
is_checked: true
|
||||
};
|
||||
sidebar_items[filter_value] = filter_item ;
|
||||
});
|
||||
|
||||
self.all_filters = sidebar_items;
|
||||
self.now_filter_ids = $.map(self.all_filters, function(o) { return o.value; });
|
||||
|
||||
self.sidebar.filter.events_loaded(self.all_filters);
|
||||
self.sidebar.filter.set_filters();
|
||||
|
||||
self.sidebar.filter.addUpdateButton();
|
||||
}).done(function () {
|
||||
self.$calendar.fullCalendar('refetchEvents');
|
||||
});
|
||||
}
|
||||
);
|
||||
}
|
||||
this.extraSideBar();
|
||||
}
|
||||
self.$calendar.fullCalendar(self.get_fc_init_options());
|
||||
|
@ -1430,20 +1377,14 @@ openerp.web_calendar = function(instance) {
|
|||
this.$el.html(QWeb.render('CalendarView.sidebar.responsible', { filters: filters }));
|
||||
},
|
||||
filter_click: function(e) {
|
||||
var self = this;
|
||||
self.view.all_filters[parseInt(e.target.value)].is_checked = e.target.checked;
|
||||
var self = this;
|
||||
if (self.view.all_filters[0] && e.target.value == self.view.all_filters[0].value) {
|
||||
self.view.all_filters[0].is_checked = e.target.checked;
|
||||
} else {
|
||||
self.view.all_filters[parseInt(e.target.value)].is_checked = e.target.checked;
|
||||
}
|
||||
self.view.$calendar.fullCalendar('refetchEvents');
|
||||
},
|
||||
addUpdateButton: function() {
|
||||
var self=this;
|
||||
this.$('div.oe_calendar_all_responsibles').append(QWeb.render('CalendarView.sidebar.button_add_contact'));
|
||||
this.$(".add_contacts_link_btn").on('click', function() {
|
||||
self.rpc("/web/action/load", {
|
||||
action_id: "calendar.action_calendar_contacts"
|
||||
}).then( function(result) { return self.do_action(result); });
|
||||
});
|
||||
|
||||
},
|
||||
});
|
||||
|
||||
};
|
||||
|
|
|
@ -35,7 +35,7 @@
|
|||
<t t-if="(filters_value.value != -1) && filters_value.avatar_model ">
|
||||
<img t-att-src="'/web/binary/image?model=' + filters_value.avatar_model + '&field=image_small&id=' + filters_value.value" class="cal_avatar"/>
|
||||
</t>
|
||||
<span t-attf-class="cal_opacity underline_color_#{filters_value.color}" ><t t-esc="filters_value.label" /></span>
|
||||
<span id="color_filter" t-attf-class="cal_opacity underline_color_#{filters_value.color}" ><t t-esc="filters_value.label" /></span>
|
||||
</t>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -53,13 +53,6 @@
|
|||
</t>
|
||||
</t>
|
||||
</div>
|
||||
|
||||
<div t-name="CalendarView.sidebar.button_add_contact" class="oe_calendar_buttons_add_contact">
|
||||
<button class='oe_button oe_form_button oe_link add_contacts_link_btn' style='margin-top:10px'>
|
||||
<span class='add_contacts_link'>See Employee's Meeting</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
|
||||
<div t-name="CalendarView.quick_create" class="oe_calendar_quick_create openerp">
|
||||
|
||||
|
|
|
@ -62,6 +62,14 @@ instance.web_kanban.KanbanView = instance.web.View.extend({
|
|||
},
|
||||
load_kanban: function(data) {
|
||||
this.fields_view = data;
|
||||
|
||||
// use default order if defined in xml description
|
||||
var default_order = this.fields_view.arch.attrs.default_order,
|
||||
unsorted = !this.dataset._sort.length;
|
||||
if (unsorted && default_order) {
|
||||
this.dataset.set_sort(default_order.split(','));
|
||||
}
|
||||
|
||||
this.$el.addClass(this.fields_view.arch.attrs['class']);
|
||||
this.$buttons = $(QWeb.render("KanbanView.buttons", {'widget': this}));
|
||||
if (this.options.$buttons) {
|
||||
|
|
|
@ -24,6 +24,7 @@ class ir_http(orm.AbstractModel):
|
|||
_inherit = 'ir.http'
|
||||
|
||||
rerouting_limit = 10
|
||||
geo_ip_resolver = None
|
||||
|
||||
def _get_converters(self):
|
||||
return dict(
|
||||
|
@ -53,6 +54,18 @@ class ir_http(orm.AbstractModel):
|
|||
|
||||
request.website_multilang = request.website_enabled and func and func.routing.get('multilang', True)
|
||||
|
||||
if not request.session.has_key('geoip'):
|
||||
record = {}
|
||||
if self.geo_ip_resolver is None:
|
||||
try:
|
||||
import GeoIP
|
||||
self.geo_ip_resolver = GeoIP.open('/usr/share/GeoIP/GeoIP.dat', GeoIP.GEOIP_STANDARD)
|
||||
except ImportError:
|
||||
self.geo_ip_resolver = False
|
||||
if self.geo_ip_resolver:
|
||||
record = self.geo_ip_resolver.record_by_addr(request.httprequest.remote_addr) or {}
|
||||
request.session['geoip'] = record
|
||||
|
||||
if request.website_enabled:
|
||||
if func:
|
||||
self._authenticate(func.routing['auth'])
|
||||
|
|
|
@ -1,15 +1,6 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
import logging
|
||||
import re
|
||||
import werkzeug
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
try:
|
||||
import GeoIP
|
||||
except ImportError:
|
||||
GeoIP = None
|
||||
_logger.warn("Please install GeoIP python module to use events localisation.")
|
||||
|
||||
from openerp import SUPERUSER_ID
|
||||
from openerp.addons.web import http
|
||||
from openerp.addons.web.http import request
|
||||
|
@ -20,12 +11,6 @@ from openerp.tools.translate import _
|
|||
class WebsiteCrmPartnerAssign(http.Controller):
|
||||
_references_per_page = 40
|
||||
|
||||
def _get_current_country_code(self):
|
||||
if not GeoIP:
|
||||
return False
|
||||
GI = GeoIP.open('/usr/share/GeoIP/GeoIP.dat', 0)
|
||||
return GI.country_code_by_addr(request.httprequest.remote_addr)
|
||||
|
||||
@http.route([
|
||||
'/partners',
|
||||
'/partners/page/<int:page>',
|
||||
|
@ -52,7 +37,7 @@ class WebsiteCrmPartnerAssign(http.Controller):
|
|||
# group by grade
|
||||
grade_domain = list(base_partner_domain)
|
||||
if not country and not country_all:
|
||||
country_code = self._get_current_country_code()
|
||||
country_code = request.session['geoip'].get('country_code')
|
||||
if country_code:
|
||||
country_ids = country_obj.search(request.cr, request.uid, [('code', '=', country_code)], context=request.context)
|
||||
if country_ids:
|
||||
|
|
|
@ -19,28 +19,18 @@
|
|||
#
|
||||
##############################################################################
|
||||
|
||||
import logging
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
from dateutil.relativedelta import relativedelta
|
||||
|
||||
import werkzeug.urls
|
||||
|
||||
from openerp import SUPERUSER_ID
|
||||
from openerp import http
|
||||
from openerp import tools
|
||||
from openerp.http import request
|
||||
from openerp.tools.translate import _
|
||||
from openerp.addons.website.models.website import slug
|
||||
|
||||
_logger = logging.getLogger(__name__)
|
||||
|
||||
try:
|
||||
import GeoIP
|
||||
except ImportError:
|
||||
GeoIP = None
|
||||
_logger.warn("Please install GeoIP python module to use events localisation.")
|
||||
|
||||
class website_event(http.Controller):
|
||||
@http.route(['/event', '/event/page/<int:page>'], type='http', auth="public", website=True)
|
||||
def events(self, page=1, **searches):
|
||||
|
@ -214,10 +204,6 @@ class website_event(http.Controller):
|
|||
event = Event.browse(request.cr, request.uid, event_id, context=context)
|
||||
return request.redirect("/event/%s/register?enable_editor=1" % slug(event))
|
||||
|
||||
def get_visitors_country(self):
|
||||
GI = GeoIP.open('/usr/share/GeoIP/GeoIP.dat', 0)
|
||||
return {'country_code': GI.country_code_by_addr(request.httprequest.remote_addr), 'country_name': GI.country_name_by_addr(request.httprequest.remote_addr)}
|
||||
|
||||
def get_formated_date(self, event):
|
||||
start_date = datetime.strptime(event.date_begin, tools.DEFAULT_SERVER_DATETIME_FORMAT).date()
|
||||
end_date = datetime.strptime(event.date_end, tools.DEFAULT_SERVER_DATETIME_FORMAT).date()
|
||||
|
@ -225,21 +211,19 @@ class website_event(http.Controller):
|
|||
|
||||
@http.route('/event/get_country_event_list', type='http', auth='public', website=True)
|
||||
def get_country_events(self ,**post):
|
||||
if not GeoIP:
|
||||
return ""
|
||||
cr, uid, context, event_ids = request.cr, request.uid, request.context,[]
|
||||
country_obj = request.registry['res.country']
|
||||
event_obj = request.registry['event.event']
|
||||
cr, uid, context,event_ids = request.cr, request.uid, request.context,[]
|
||||
country_code = self.get_visitors_country()['country_code']
|
||||
country_code = request.session['geoip'].get('country_code')
|
||||
result = {'events':[],'country':False}
|
||||
if country_code:
|
||||
country_ids = country_obj.search(request.cr, request.uid, [('code', '=', country_code)], context=request.context)
|
||||
event_ids = event_obj.search(request.cr, request.uid, ['|', ('address_id', '=', None),('country_id.code', '=', country_code),('date_begin','>=', time.strftime('%Y-%m-%d 00:00:00')),('state', '=', 'confirm')], order="date_begin", context=request.context)
|
||||
country_ids = country_obj.search(cr, uid, [('code', '=', country_code)], context=context)
|
||||
event_ids = event_obj.search(cr, uid, ['|', ('address_id', '=', None),('country_id.code', '=', country_code),('date_begin','>=', time.strftime('%Y-%m-%d 00:00:00')),('state', '=', 'confirm')], order="date_begin", context=context)
|
||||
if not event_ids:
|
||||
event_ids = event_obj.search(request.cr, request.uid, [('date_begin','>=', time.strftime('%Y-%m-%d 00:00:00')),('state', '=', 'confirm')], order="date_begin", context=request.context)
|
||||
for event in event_obj.browse(request.cr, request.uid, event_ids, context=request.context)[:6]:
|
||||
event_ids = event_obj.search(cr, uid, [('date_begin','>=', time.strftime('%Y-%m-%d 00:00:00')),('state', '=', 'confirm')], order="date_begin", context=context)
|
||||
for event in event_obj.browse(cr, uid, event_ids, context=context)[:6]:
|
||||
if country_code and event.country_id.code == country_code:
|
||||
result['country'] = country_obj.browse(request.cr, request.uid, country_ids[0], context=request.context)
|
||||
result['country'] = country_obj.browse(cr, uid, country_ids[0], context=context)
|
||||
result['events'].append({
|
||||
"date": self.get_formated_date(event),
|
||||
"event": event,
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
|
||||
from openerp.osv import osv
|
||||
from openerp.tools.safe_eval import safe_eval as eval
|
||||
|
||||
|
||||
class MailGroup(osv.Model):
|
||||
|
@ -10,9 +11,14 @@ class MailGroup(osv.Model):
|
|||
res = super(MailGroup, self).message_get_email_values(cr, uid, id, notif_mail=notif_mail, context=context)
|
||||
group = self.browse(cr, uid, id, context=context)
|
||||
base_url = self.pool['ir.config_parameter'].get_param(cr, uid, 'web.base.url')
|
||||
res['headers'].update({
|
||||
try:
|
||||
headers = eval(res.get('headers', '{}'))
|
||||
except Exception:
|
||||
headers = {}
|
||||
headers.update({
|
||||
'List-Archive': '<%s/groups/%s>' % (base_url, group.id),
|
||||
'List-Subscribe': '<%s/groups>' % (base_url),
|
||||
'List-Unsubscribe': '<%s/groups>' % (base_url),
|
||||
})
|
||||
res['headers'] = '%s' % headers
|
||||
return res
|
||||
|
|
|
@ -47,16 +47,14 @@
|
|||
popover: { next: _t("Continue") },
|
||||
},
|
||||
{
|
||||
element: '.product_price .oe_currency_value',
|
||||
element: '.product_price .oe_currency_value:visible',
|
||||
sampleText: '20.50',
|
||||
placement: 'left',
|
||||
title: _t("Change the price"),
|
||||
content: _t("Edit the price of this product by clicking on the amount."),
|
||||
},
|
||||
|
||||
|
||||
{
|
||||
waitNot: '.product_price .oe_currency_value:containsExact(1.00)',
|
||||
waitNot: '.product_price .oe_currency_value:visible:containsExact(1.00)',
|
||||
element: '#wrap img.product_detail_img',
|
||||
placement: 'top',
|
||||
title: _t("Update image"),
|
||||
|
|
|
@ -408,7 +408,7 @@
|
|||
|
||||
<template id="product_price">
|
||||
<div itemprop="offers" itemscope="itemscope" itemtype="http://schema.org/Offer" class="product_price mt16">
|
||||
<h4 class="oe_price_h4">
|
||||
<h4 class="oe_price_h4 css_editable_mode_hidden">
|
||||
<t t-if="product.lst_price != product.price">
|
||||
<span class="text-danger" style="text-decoration: line-through;"
|
||||
t-field="product.lst_price"
|
||||
|
@ -426,6 +426,13 @@
|
|||
<span itemprop="price" style="display:none;" t-esc="product.price"/>
|
||||
<span itemprop="priceCurrency" style="display:none;" t-esc="website.pricelist_id.currency_id.name"/>
|
||||
</h4>
|
||||
<h4 class="css_editable_mode_display" style="display: none;">
|
||||
<span t-field="product.lst_price"
|
||||
t-field-options='{
|
||||
"widget": "monetary",
|
||||
"display_currency": "website.pricelist_id.currency_id"
|
||||
}'/>
|
||||
</h4>
|
||||
<h4 class="hidden oe_not_available bg-warning">Product not available</h4>
|
||||
</div>
|
||||
</template>
|
||||
|
|
1
odoo.py
1
odoo.py
|
@ -72,7 +72,6 @@ def cmd_setup_git():
|
|||
# alias
|
||||
run('git','config','alias.st','status')
|
||||
# merge bzr style
|
||||
run('git','config','merge.ff','no')
|
||||
run('git','config','merge.commit','no')
|
||||
# pull let me choose between merge or rebase only works in git > 2.0, use an alias for 1
|
||||
run('git','config','pull.ff','only')
|
||||
|
|
|
@ -28,6 +28,15 @@
|
|||
<page string="Groups">
|
||||
<field name="groups_id"/>
|
||||
</page>
|
||||
<page name="inherit_children" string="Inherited Views">
|
||||
<field name="inherit_children_ids" context="{'default_model':model,'default_type':type,'default_inherit_id':active_id}">
|
||||
<tree>
|
||||
<field name="priority"/>
|
||||
<field name="name"/>
|
||||
<field name="xml_id"/>
|
||||
</tree>
|
||||
</field>
|
||||
</page>
|
||||
</notebook>
|
||||
</sheet>
|
||||
</form>
|
||||
|
|
|
@ -130,14 +130,14 @@ class AutoReload(object):
|
|||
self.handler = EventHandler(self)
|
||||
self.notifier = pyinotify.Notifier(self.wm, self.handler, timeout=0)
|
||||
mask = pyinotify.IN_MODIFY | pyinotify.IN_CREATE # IN_MOVED_FROM, IN_MOVED_TO ?
|
||||
for path in openerp.modules.modules.ad_paths:
|
||||
for path in openerp.modules.module.ad_paths:
|
||||
_logger.info('Watching addons folder %s', path)
|
||||
self.wm.add_watch(path, mask, rec=True)
|
||||
|
||||
def process_data(self, files):
|
||||
xml_files = [i for i in files if i.endswith('.xml')]
|
||||
for i in xml_files:
|
||||
for path in openerp.modules.modules.ad_paths:
|
||||
for path in openerp.modules.module.ad_paths:
|
||||
if i.startswith(path):
|
||||
# find out wich addons path the file belongs to
|
||||
# and extract it's module name
|
||||
|
|
|
@ -7,4 +7,4 @@ formats=gztar
|
|||
formats=rpm
|
||||
|
||||
[bdist_rpm]
|
||||
install_script=setup_rpm.sh
|
||||
install_script=setup/setup_rpm.sh
|
|
@ -1,10 +1,9 @@
|
|||
include Makefile.version
|
||||
include Makefile.python
|
||||
|
||||
SERVER_DIRECTORY=../server
|
||||
FILES_DIRECTORY=files
|
||||
|
||||
LAUNCH_PY2EXE=/cygdrive/c/python${PYTHON_VERSION}/python.exe setup.py py2exe
|
||||
LAUNCH_PY2EXE=/cygdrive/c/python26/python.exe setup.py py2exe
|
||||
|
||||
MAKENSIS_ARGUMENTS=/DVERSION=$(VERSION)
|
||||
|
||||
|
@ -27,7 +26,7 @@ server_clean:
|
|||
server: server_clean
|
||||
(cd $(SERVER_DIRECTORY)/win32 && $(LAUNCH_PY2EXE))
|
||||
(cd $(SERVER_DIRECTORY) && $(LAUNCH_PY2EXE))
|
||||
rm -rf `/usr/bin/find ${SERVER_DIRECTORY}/dist/openerp/addons -maxdepth 1 -mindepth 1 -not -name "web_*" -and -not -name "base" -and -not -name "web" -type d | xargs rm -rf`
|
||||
# rm -rf `/usr/bin/find ${SERVER_DIRECTORY}/dist/openerp/addons -maxdepth 1 -mindepth 1 -not -name "web*" -and -not -name "base" -type d | xargs rm -rf`
|
||||
(cd $(SERVER_DIRECTORY) && $(LAUNCH_MAKENSIS))
|
||||
cp $(SERVER_DIRECTORY)/openerp-*.exe $(FILES_DIRECTORY)/openerp-server-setup-$(VERSION).exe
|
||||
|
||||
|
|
|
@ -0,0 +1,329 @@
|
|||
# Source: http://nsis.sourceforge.net/CharToASCII
|
||||
!include LogicLib.nsh
|
||||
|
||||
!ifndef CHAR_TO_ASCII_NSH
|
||||
|
||||
!define CharToASCII "!insertmacro CharToASCII"
|
||||
|
||||
!macro CharToASCII AsciiCode Character
|
||||
Push "${Character}"
|
||||
Call CharToASCII
|
||||
Pop "${AsciiCode}"
|
||||
!macroend
|
||||
|
||||
Function CharToASCII
|
||||
Exch $0 ; given character
|
||||
Push $1 ; current character
|
||||
Push $2 ; current Ascii Code
|
||||
|
||||
StrCpy $2 1 ; right from start
|
||||
Loop:
|
||||
IntFmt $1 %c $2 ; Get character from current ASCII code
|
||||
${If} $1 S== $0 ; case sensitive string comparison
|
||||
StrCpy $0 $2
|
||||
Goto Done
|
||||
${EndIf}
|
||||
IntOp $2 $2 + 1
|
||||
StrCmp $2 255 0 Loop ; ascii from 1 to 255
|
||||
StrCpy $0 0 ; ASCII code wasn't found -> return 0
|
||||
Done:
|
||||
Pop $2
|
||||
Pop $1
|
||||
Exch $0
|
||||
FunctionEnd
|
||||
|
||||
!endif ; CHAR_TO_ASCII_NSH
|
||||
|
||||
# Source: http://nsis.sourceforge.net/Base64
|
||||
!ifndef BASE64_NSH
|
||||
!define BASE64_NSH
|
||||
|
||||
!define BASE64_ENCODINGTABLE "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"
|
||||
!define BASE64_ENCODINGTABLEURL "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
|
||||
|
||||
!define BASE64_PADDING "="
|
||||
|
||||
VAR OCTETVALUE
|
||||
VAR BASE64TEMP
|
||||
|
||||
!define Base64_Encode "!insertmacro Base64_Encode"
|
||||
!define Base64_URLEncode "!insertmacro Base64_URLEncode"
|
||||
|
||||
!macro Base64_Encode _cleartext
|
||||
push $R0
|
||||
push $R1
|
||||
push $R2
|
||||
push $0
|
||||
push $1
|
||||
push $2
|
||||
push $3
|
||||
push $4
|
||||
push $5
|
||||
push $6
|
||||
push $7
|
||||
push `${_cleartext}`
|
||||
push `${BASE64_ENCODINGTABLE}`
|
||||
Call Base64_Encode
|
||||
Pop $BASE64TEMP
|
||||
Pop $7
|
||||
Pop $6
|
||||
Pop $5
|
||||
Pop $4
|
||||
Pop $3
|
||||
Pop $2
|
||||
Pop $1
|
||||
Pop $0
|
||||
pop $R2
|
||||
pop $R1
|
||||
pop $R0
|
||||
Push $BASE64TEMP
|
||||
!macroend
|
||||
|
||||
!macro Base64_URLEncode _cleartext
|
||||
push $R0
|
||||
push $R1
|
||||
push $R2
|
||||
push $0
|
||||
push $1
|
||||
push $2
|
||||
push $3
|
||||
push $4
|
||||
push $5
|
||||
push $6
|
||||
push $7
|
||||
push `${_cleartext}`
|
||||
push `${BASE64_ENCODINGTABLEURL}`
|
||||
Call Base64_Encode
|
||||
Pop $BASE64TEMP
|
||||
Pop $7
|
||||
Pop $6
|
||||
Pop $5
|
||||
Pop $4
|
||||
Pop $3
|
||||
Pop $2
|
||||
Pop $1
|
||||
Pop $0
|
||||
pop $R2
|
||||
pop $R1
|
||||
pop $R0
|
||||
Push $BASE64TEMP
|
||||
!macroend
|
||||
|
||||
Function Base64_Encode
|
||||
pop $R2 ; Encoding table
|
||||
pop $R0 ; Clear Text
|
||||
StrCpy "$R1" "" # The result
|
||||
|
||||
StrLen $1 "$R0"
|
||||
StrCpy $0 0
|
||||
|
||||
${WHILE} $0 < $1
|
||||
# Copy 3 characters, and for each character push their value.
|
||||
StrCpy $OCTETVALUE 0
|
||||
|
||||
StrCpy $5 $0
|
||||
StrCpy $4 "$R0" 1 $5
|
||||
${CharToASCII} $4 "$4"
|
||||
|
||||
IntOp $OCTETVALUE $4 << 16
|
||||
|
||||
IntOp $5 $5 + 1
|
||||
${IF} $5 < $1
|
||||
StrCpy $4 "$R0" 1 $5
|
||||
${CharToASCII} $4 "$4"
|
||||
|
||||
IntOp $4 $4 << 8
|
||||
IntOp $OCTETVALUE $OCTETVALUE + $4
|
||||
|
||||
IntOp $5 $5 + 1
|
||||
${IF} $5 < $1
|
||||
StrCpy $4 "$R0" 1 $5
|
||||
${CharToASCII} $4 "$4"
|
||||
|
||||
IntOp $OCTETVALUE $OCTETVALUE + $4
|
||||
${ENDIF}
|
||||
${ENDIF}
|
||||
|
||||
# Now take the 4 indexes from the encoding table, based on 6bits each of the octet's value.
|
||||
IntOp $4 $OCTETVALUE >> 18
|
||||
IntOp $4 $4 & 63
|
||||
StrCpy $5 "$R2" 1 $4
|
||||
StrCpy $R1 "$R1$5"
|
||||
|
||||
IntOp $4 $OCTETVALUE >> 12
|
||||
IntOp $4 $4 & 63
|
||||
StrCpy $5 "$R2" 1 $4
|
||||
StrCpy $R1 "$R1$5"
|
||||
|
||||
StrCpy $6 $0
|
||||
StrCpy $7 2
|
||||
|
||||
IntOp $6 $6 + 1
|
||||
${IF} $6 < $1
|
||||
IntOp $4 $OCTETVALUE >> 6
|
||||
IntOp $4 $4 & 63
|
||||
StrCpy $5 "$R2" 1 $4
|
||||
StrCpy $R1 "$R1$5"
|
||||
IntOp $7 $7 - 1
|
||||
${ENDIF}
|
||||
|
||||
IntOp $6 $6 + 1
|
||||
${IF} $6 < $1
|
||||
IntOp $4 $OCTETVALUE & 63
|
||||
StrCpy $5 "$R2" 1 $4
|
||||
StrCpy $R1 "$R1$5"
|
||||
IntOp $7 $7 - 1
|
||||
${ENDIF}
|
||||
|
||||
# If there is any padding required, we now write that here.
|
||||
${IF} $7 > 0
|
||||
${WHILE} $7 > 0
|
||||
StrCpy $R1 "$R1${BASE64_PADDING}"
|
||||
IntOp $7 $7 - 1
|
||||
${ENDWHILE}
|
||||
${ENDIF}
|
||||
|
||||
IntOp $0 $0 + 3
|
||||
${ENDWHILE}
|
||||
|
||||
Push "$R1"
|
||||
FunctionEnd
|
||||
|
||||
|
||||
!define Base64_Decode "!insertmacro Base64_Decode"
|
||||
!define Base64_URLDecode "!insertmacro Base64_URLDecode"
|
||||
|
||||
!macro Base64_Decode _encodedtext
|
||||
push `${_encodedtext}`
|
||||
push `${BASE64_ENCODINGTABLE}`
|
||||
Call Base64_Decode
|
||||
!macroend
|
||||
|
||||
!macro Base64_URLDecode _encodedtext
|
||||
push `${_encodedtext}`
|
||||
push `${BASE64_ENCODINGTABLEURL}`
|
||||
Call Base64_Decode
|
||||
!macroend
|
||||
|
||||
Function base64_Decode
|
||||
; Stack: strBase64table strEncoded
|
||||
Push $9 ; Stack: $9 strBase64table strEncoded ; $9 = strDecoded
|
||||
Exch 2 ; Stack: strEncoded strBase64table $9
|
||||
Exch ; Stack: strBase64table strEncoded $9
|
||||
Exch $0 ; Stack: $0 strEncoded $9 ; $0 = strBase64table
|
||||
Exch ; Stack: strEncoded $0 $9
|
||||
Exch $1 ; Stack: $1 $0 $9 ; $1 = strEncoded
|
||||
|
||||
Push $2 ; strBase64table.length
|
||||
Push $3 ; strEncoded.length
|
||||
Push $4 ; strBase64table.counter
|
||||
Push $5 ; strEncoded.counter
|
||||
Push $6 ; strBase64table.char
|
||||
Push $7 ; strEncoded.char
|
||||
|
||||
Push $R0 ; 6bit-group.counter
|
||||
Push $R1 ; 6bit-group.a
|
||||
Push $R2 ; 6bit-group.b
|
||||
Push $R3 ; 6bit-group.c
|
||||
Push $R4 ; 6bit-group.d
|
||||
|
||||
Push $R5 ; bit-group.tempVar.a
|
||||
Push $R6 ; bit-group.tempVar.b
|
||||
|
||||
Push $R7 ; 8bit-group.A
|
||||
Push $R8 ; 8bit-group.B
|
||||
Push $R9 ; 8bit-group.C
|
||||
|
||||
StrCpy $9 "" ; Result string
|
||||
|
||||
StrLen $2 "$0" ; Get the length of the base64 table into $2
|
||||
StrLen $3 "$1" ; Get the length of the encoded text into $3
|
||||
IntOp $3 $3 - 1 ; Subtract one as the StrCpy offset is zero-based
|
||||
|
||||
StrCpy $R0 4 ; Initialize the 6bit-group.counter
|
||||
|
||||
${ForEach} $5 0 $3 + 1 ; Loop over the encoded string
|
||||
StrCpy $7 $1 1 $5 ; Grab the character at the loop counter's index
|
||||
|
||||
${If} $7 == "${BASE64_PADDING}" ; If it's the padding char
|
||||
Push 0 ; Push value 0 (no impact on decoded string)
|
||||
${Else} ; Otherwise
|
||||
${ForEach} $4 0 $2 + 1 ; Loop over the base64 lookup table
|
||||
StrCpy $6 $0 1 $4 ; Grab the character at this loop counter's index
|
||||
${If} $6 S== $7 ; If that character matches the encoded string character
|
||||
${ExitFor} ; Exit this loop early
|
||||
${EndIf}
|
||||
${Next}
|
||||
Push $4 ; Push the lookup's index to the stack
|
||||
${EndIf}
|
||||
|
||||
IntOp $R0 $R0 - 1 ; Decrease the 6bit-group counter
|
||||
|
||||
${If} $R0 = 0 ; If that counter reaches zero
|
||||
; Pop the index values off the stack to variables
|
||||
Pop $R4
|
||||
Pop $R3
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
|
||||
; The way the base64 decoding works is like this...
|
||||
; Normal ASCII has 8 bits, base64 has 6 bits.
|
||||
; Those 8 bits need to be presented as 6 bits somehow
|
||||
; Turns out you can easily do that by taking their common multiple: 24
|
||||
; This results in 3 8bit characters per each 4 6bit characters:
|
||||
; AAAAAAAA BBBBBBBB CCCCCCCC
|
||||
; aaaaaabb bbbbcccc ccdddddd
|
||||
|
||||
; So to go back to AAAAAAAA, you need:
|
||||
; aaaaaa shifted two bits to the left
|
||||
; the two left-most bits of bbbbbb,
|
||||
; which you can do by shifting it four bits to the right
|
||||
IntOp $R5 $R1 << 2
|
||||
IntOp $R6 $R2 >> 4
|
||||
IntOp $R5 $R5 | $R6
|
||||
IntFmt $R7 "%c" $R5 ; IntFmt turns the resulting 8bit value to a character
|
||||
|
||||
; For BBBBBBBB, you need:
|
||||
; the four least significant bits of bbbbbb
|
||||
; which you can get by binary OR'ing with 2^4-1 = 15
|
||||
; the four most significant bits of cccccc
|
||||
; which you can get by just shifting it two bits to the right
|
||||
IntOp $R5 $R2 & 15
|
||||
InTop $R5 $R5 << 4
|
||||
IntOp $R6 $R3 >> 2
|
||||
IntOp $R5 $R5 | $R6
|
||||
IntFmt $R8 "%c" $R5
|
||||
|
||||
; For CCCCCCCC, the procedure is entirely similar.
|
||||
IntOp $R5 $R3 & 3
|
||||
IntOp $R5 $R5 << 6
|
||||
IntOp $R5 $R5 | $R4
|
||||
IntFmt $R9 "%c" $R5
|
||||
|
||||
StrCpy $9 "$9$R7$R8$R9" ; Tack it all onto the result
|
||||
StrCpy $R0 4 ; Reset the 6bit-group counter
|
||||
${EndIf}
|
||||
${Next}
|
||||
|
||||
; Done. Now let's restore the user's variables
|
||||
Pop $R9
|
||||
Pop $R8
|
||||
Pop $R7
|
||||
Pop $R6
|
||||
Pop $R5
|
||||
Pop $R4
|
||||
Pop $R3
|
||||
Pop $R2
|
||||
Pop $R1
|
||||
Pop $R0
|
||||
Pop $7
|
||||
Pop $6
|
||||
Pop $5
|
||||
Pop $4
|
||||
Pop $3
|
||||
Pop $2
|
||||
Pop $1
|
||||
Pop $0
|
||||
Exch $9 ; Stack: strDecoded
|
||||
FunctionEnd
|
||||
!endif ;BASE64_NSH
|
Loading…
Reference in New Issue