[MERGE] forward port of branch 8.0 up to 0aab81c
This commit is contained in:
@@ -8,6 +8,7 @@ recursive-include openerp *.html
|
||||
recursive-include openerp *.jpeg
|
||||
recursive-include openerp *.jpg
|
||||
recursive-include openerp *.js
|
||||
recursive-include openerp *.less
|
||||
recursive-include openerp *.md
|
||||
recursive-include openerp *.png
|
||||
recursive-include openerp *.po
|
||||
|
||||
@@ -48,7 +48,6 @@ Processes like maintaining general ledgers are done through the defined Financia
|
||||
for a particular financial year and for preparation of vouchers there is a module named account_voucher.
|
||||
""",
|
||||
'website': 'https://www.odoo.com/page/billing',
|
||||
'images' : ['images/accounts.jpeg','images/bank_statement.jpeg','images/cash_register.jpeg','images/chart_of_accounts.jpeg','images/customer_invoice.jpeg','images/journal_entries.jpeg'],
|
||||
'depends' : ['base_setup', 'product', 'analytic', 'board', 'edi', 'report'],
|
||||
'data': [
|
||||
'security/account_security.xml',
|
||||
|
||||
@@ -873,7 +873,7 @@ class account_bank_statement_line(osv.osv):
|
||||
# Unfortunately, that spawns a "no access rights" error ; it shouldn't.
|
||||
def _needaction_domain_get(self, cr, uid, context=None):
|
||||
user = self.pool.get("res.users").browse(cr, uid, uid)
|
||||
return ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id]), ('journal_entry_ids', '=', False)]
|
||||
return ['|', ('company_id', '=', False), ('company_id', 'child_of', [user.company_id.id]), ('journal_entry_ids', '=', False), ('account_id', '=', False)]
|
||||
|
||||
_order = "statement_id desc, sequence"
|
||||
_name = "account.bank.statement.line"
|
||||
|
||||
@@ -2554,7 +2554,7 @@
|
||||
<field name="sign"/>
|
||||
<field name="style_overwrite"/>
|
||||
</group>
|
||||
<notebook attrs="{'invisible': [('type','not in',['accounts','account_type'])]}">
|
||||
<notebook attrs="{'invisible': [('type','not in',['accounts','account_type', 'account_report'])]}">
|
||||
<page string="Report">
|
||||
<group>
|
||||
<field name="display_detail" attrs="{'invisible': [('type','not in',['accounts','account_type'])]}"/>
|
||||
|
||||
@@ -55,6 +55,10 @@
|
||||
top: 2px;
|
||||
z-index: 10;
|
||||
text-shadow: -1px -1px 0 #f5f5f5, 1px -1px 0 #f5f5f5, -1px 1px 0 #f5f5f5, 1px 1px 0 #f5f5f5; }
|
||||
.openerp .oe_bank_statement_reconciliation .show_more_container {
|
||||
text-align: center; }
|
||||
.openerp .oe_bank_statement_reconciliation .show_more_container .show_more {
|
||||
display: none; }
|
||||
.openerp .oe_bank_statement_reconciliation .notification_area {
|
||||
margin: 0 15px; }
|
||||
.openerp .oe_bank_statement_reconciliation .interface_options {
|
||||
|
||||
@@ -92,6 +92,13 @@ $aestetic_animation_speed: 300ms;
|
||||
}
|
||||
}
|
||||
|
||||
.show_more_container {
|
||||
text-align: center;
|
||||
|
||||
.show_more {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
.notification_area {
|
||||
margin: 0 $actionColWidth;
|
||||
}
|
||||
|
||||
@@ -15,11 +15,13 @@ openerp.account = function (instance) {
|
||||
"click .statement_name span": "statementNameClickHandler",
|
||||
"keyup .change_statement_name_field": "changeStatementNameFieldHandler",
|
||||
"click .change_statement_name_button": "changeStatementButtonClickHandler",
|
||||
"click .show_more": "showMoreButtonClickHandler",
|
||||
},
|
||||
|
||||
init: function(parent, context) {
|
||||
this._super(parent);
|
||||
this.max_reconciliations_displayed = 10;
|
||||
// Number of reconciliations loaded initially and by clicking 'show more'
|
||||
this.num_reconciliations_fetched_in_batch = 10;
|
||||
if (context.context.statement_id) this.statement_ids = [context.context.statement_id];
|
||||
if (context.context.statement_ids) this.statement_ids = context.context.statement_ids;
|
||||
this.single_statement = this.statement_ids !== undefined && this.statement_ids.length === 1;
|
||||
@@ -237,7 +239,7 @@ openerp.account = function (instance) {
|
||||
total_lines: self.already_reconciled_lines+self.st_lines.length
|
||||
}));
|
||||
self.updateProgressbar();
|
||||
var reconciliations_to_show = self.st_lines.slice(0, self.max_reconciliations_displayed);
|
||||
var reconciliations_to_show = self.st_lines.slice(0, self.num_reconciliations_fetched_in_batch);
|
||||
self.last_displayed_reconciliation_index = reconciliations_to_show.length;
|
||||
self.$(".reconciliation_lines_container").css("opacity", 0);
|
||||
|
||||
@@ -251,6 +253,7 @@ openerp.account = function (instance) {
|
||||
$.when.apply($, child_promises).then(function(){
|
||||
self.$(".reconciliation_lines_container").animate({opacity: 1}, self.aestetic_animation_speed);
|
||||
self.getChildren()[0].set("mode", "match");
|
||||
self.updateShowMoreButton();
|
||||
if (self.notifications) {
|
||||
self.displayNotifications(self.notifications);
|
||||
}
|
||||
@@ -340,7 +343,7 @@ openerp.account = function (instance) {
|
||||
var child = reconciliations[i];
|
||||
data.push([child.st_line_id, child.makeMoveLineDicts()]);
|
||||
}
|
||||
var deferred_animation = self.$(".reconciliation_lines_container").fadeOut(self.aestetic_animation_speed);
|
||||
var deferred_animation = self.$(".reconciliation_lines_container, .show_more_container").fadeOut(self.aestetic_animation_speed);
|
||||
deferred_rpc = self.model_bank_statement_line.call("process_reconciliations", [data]);
|
||||
return $.when(deferred_animation, deferred_rpc)
|
||||
.done(function() {
|
||||
@@ -359,48 +362,25 @@ openerp.account = function (instance) {
|
||||
|
||||
// Display new line if there are left
|
||||
if (self.last_displayed_reconciliation_index < self.st_lines.length) {
|
||||
var begin = self.last_displayed_reconciliation_index;
|
||||
var end = Math.min((begin+self.max_reconciliations_displayed), self.st_lines.length);
|
||||
var reconciliations_to_show = self.st_lines.slice(begin, end);
|
||||
|
||||
return self.model_bank_statement_line
|
||||
.call("get_data_for_reconciliations", [reconciliations_to_show])
|
||||
.then(function (data) {
|
||||
var child_promises = [];
|
||||
var datum;
|
||||
while ((datum = data.shift()) !== undefined) {
|
||||
var context = {
|
||||
st_line_id: datum.st_line.id,
|
||||
mode: 'inactive',
|
||||
animate_entrance: false,
|
||||
initial_data_provided: true,
|
||||
st_line: datum.st_line,
|
||||
reconciliation_proposition: datum.reconciliation_proposition,
|
||||
};
|
||||
var widget = new instance.web.account.bankStatementReconciliationLine(self, context);
|
||||
child_promises.push(widget.appendTo(self.$(".reconciliation_lines_container")));
|
||||
return self.displayReconciliations(self.num_reconciliations_fetched_in_batch).then(function() {
|
||||
// Put the first line in match mode
|
||||
if (self.reconciled_lines !== self.st_lines.length) {
|
||||
var first_child = self.getChildren()[0];
|
||||
if (first_child.get("mode") === "inactive") {
|
||||
first_child.set("mode", "match");
|
||||
}
|
||||
self.last_displayed_reconciliation_index += reconciliations_to_show.length;
|
||||
return $.when.apply($, child_promises).then(function() {
|
||||
// Put the first line in match mode
|
||||
if (self.reconciled_lines !== self.st_lines.length) {
|
||||
var first_child = self.getChildren()[0];
|
||||
if (first_child.get("mode") === "inactive") {
|
||||
first_child.set("mode", "match");
|
||||
}
|
||||
}
|
||||
self.$(".reconciliation_lines_container").fadeIn(self.aestetic_animation_speed);
|
||||
});
|
||||
});
|
||||
}
|
||||
self.$(".reconciliation_lines_container, .show_more_container").fadeIn(self.aestetic_animation_speed);
|
||||
});
|
||||
} else if (self.reconciled_lines === self.st_lines.length) {
|
||||
// Congratulate the user if the work is done
|
||||
self.displayDoneMessage();
|
||||
} else {
|
||||
// Some lines weren't persisted because they were't valid
|
||||
self.$(".reconciliation_lines_container").fadeIn(self.aestetic_animation_speed);
|
||||
self.$(".reconciliation_lines_container, .show_more_container").fadeIn(self.aestetic_animation_speed);
|
||||
}
|
||||
}).fail(function() {
|
||||
self.$(".reconciliation_lines_container").fadeIn(self.aestetic_animation_speed);
|
||||
self.$(".reconciliation_lines_container, .show_more_container").fadeIn(self.aestetic_animation_speed);
|
||||
});
|
||||
},
|
||||
|
||||
@@ -433,7 +413,8 @@ openerp.account = function (instance) {
|
||||
|
||||
// Update children if needed
|
||||
_.each(self.getChildren(), function(child){
|
||||
if ((child.partner_id === partner_id || child.st_line.has_no_partner) && child !== source_child) {
|
||||
if (child === source_child || child.st_line === undefined) return;
|
||||
if (child.partner_id === partner_id || child.st_line.has_no_partner) {
|
||||
if (contains_lines(child.get("mv_lines_selected"), line_ids)) {
|
||||
child.set("mv_lines_selected", _.filter(child.get("mv_lines_selected"), function(o){ return line_ids.indexOf(o.id) === -1 }));
|
||||
} else if (contains_lines(child.mv_lines_deselected, line_ids)) {
|
||||
@@ -457,6 +438,7 @@ openerp.account = function (instance) {
|
||||
|
||||
// Update children if needed
|
||||
_.each(self.getChildren(), function(child){
|
||||
if (child.st_line === undefined) return;
|
||||
if (child.partner_id === partner_id && child !== source_child && (child.get("mode") === "match" || child.$el.hasClass("no_match")))
|
||||
child.updateMatches();
|
||||
if (child.st_line.has_no_partner && child.get("mode") === "match" || child.$el.hasClass("no_match"))
|
||||
@@ -464,6 +446,42 @@ openerp.account = function (instance) {
|
||||
});
|
||||
},
|
||||
|
||||
displayReconciliations: function(number) {
|
||||
var self = this;
|
||||
var begin = self.last_displayed_reconciliation_index;
|
||||
var end = Math.min((begin+number), self.st_lines.length);
|
||||
var reconciliations_to_show = self.st_lines.slice(begin, end);
|
||||
|
||||
// Get ids of selected move lines (to exclude them from reconciliation proposition)
|
||||
var excluded_move_lines_ids = [];
|
||||
_.each(self.excluded_move_lines_ids, function(o){
|
||||
excluded_move_lines_ids = excluded_move_lines_ids.concat(o);
|
||||
});
|
||||
|
||||
return self.model_bank_statement_line
|
||||
.call("get_data_for_reconciliations", [reconciliations_to_show, excluded_move_lines_ids])
|
||||
.then(function (data) {
|
||||
var child_promises = [];
|
||||
var datum;
|
||||
while ((datum = data.shift()) !== undefined) {
|
||||
var context = {
|
||||
st_line_id: datum.st_line.id,
|
||||
mode: 'inactive',
|
||||
animate_entrance: false,
|
||||
initial_data_provided: true,
|
||||
st_line: datum.st_line,
|
||||
reconciliation_proposition: datum.reconciliation_proposition,
|
||||
};
|
||||
var widget = new instance.web.account.bankStatementReconciliationLine(self, context);
|
||||
child_promises.push(widget.appendTo(self.$(".reconciliation_lines_container")));
|
||||
}
|
||||
self.last_displayed_reconciliation_index += reconciliations_to_show.length;
|
||||
return $.when.apply($, child_promises).then(function(){
|
||||
self.updateShowMoreButton();
|
||||
});
|
||||
});
|
||||
},
|
||||
|
||||
displayReconciliation: function(st_line_id, mode, animate_entrance, initial_data_provided, st_line, reconciliation_proposition) {
|
||||
var self = this;
|
||||
animate_entrance = (animate_entrance === undefined ? true : animate_entrance);
|
||||
@@ -489,7 +507,7 @@ openerp.account = function (instance) {
|
||||
self.doReloadMenuReconciliation();
|
||||
|
||||
// Display new line if there are left
|
||||
if (self.last_displayed_reconciliation_index < self.st_lines.length) {
|
||||
if (self.last_displayed_reconciliation_index < self.st_lines.length && self.getChildren().length < self.num_reconciliations_fetched_in_batch) {
|
||||
self.displayReconciliation(self.st_lines[self.last_displayed_reconciliation_index++], 'inactive');
|
||||
}
|
||||
// Congratulate the user if the work is done
|
||||
@@ -504,6 +522,7 @@ openerp.account = function (instance) {
|
||||
first_child.set("mode", "match");
|
||||
}
|
||||
}
|
||||
self.updateShowMoreButton();
|
||||
},
|
||||
|
||||
goBackToStatementsTreeView: function() {
|
||||
@@ -557,6 +576,7 @@ openerp.account = function (instance) {
|
||||
|
||||
// Render it
|
||||
self.$(".protip").hide();
|
||||
self.updateShowMoreButton();
|
||||
self.$(".oe_form_sheet").append(QWeb.render("bank_statement_reconciliation_done_message", {
|
||||
title: title,
|
||||
time_taken: time_taken,
|
||||
@@ -606,7 +626,19 @@ openerp.account = function (instance) {
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
showMoreButtonClickHandler: function() {
|
||||
this.displayReconciliations(this.num_reconciliations_fetched_in_batch);
|
||||
},
|
||||
|
||||
updateShowMoreButton: function() {
|
||||
var items_remaining = this.st_lines.length - this.last_displayed_reconciliation_index;
|
||||
if (items_remaining > 0)
|
||||
this.$(".show_more").show().find(".num_items_remaining").text(items_remaining);
|
||||
else
|
||||
this.$(".show_more").hide();
|
||||
},
|
||||
|
||||
updateProgressbar: function() {
|
||||
var self = this;
|
||||
var done = self.already_reconciled_lines + self.reconciled_lines;
|
||||
|
||||
@@ -34,6 +34,7 @@
|
||||
<div class="oe_clear"></div>
|
||||
<div class="notification_area"></div>
|
||||
<div class="reconciliation_lines_container"></div>
|
||||
<div class="show_more_container"><button class="show_more">Show more... (<span class="num_items_remaining"></span> remaining)</button></div>
|
||||
<p class='protip'>Tip : Hit ctrl-enter to validate the whole sheet.</p>
|
||||
</div></div>
|
||||
</t>
|
||||
|
||||
@@ -1,9 +1,3 @@
|
||||
from . import test_tax
|
||||
from . import test_search
|
||||
from . import test_reconciliation
|
||||
|
||||
fast_suite = [
|
||||
test_tax,
|
||||
test_search,
|
||||
test_reconciliation,
|
||||
]
|
||||
|
||||
@@ -32,7 +32,6 @@ Adds menu to show relevant information to each manager.You can also view the rep
|
||||
""",
|
||||
'author': 'Camptocamp / Odoo',
|
||||
'website': 'https://www.odoo.com/page/billing',
|
||||
'images': ['images/bill_tasks_works.jpeg','images/overpassed_accounts.jpeg'],
|
||||
'depends': ['hr_timesheet_invoice', 'sale'], #although sale is technically not required to install this module, all menuitems are located under 'Sales' application
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
|
||||
@@ -37,7 +37,6 @@ Allows to automatically select analytic accounts based on criterions:
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/accounting',
|
||||
'images': ['images/analytic_defaults.jpeg'],
|
||||
'depends': ['sale_stock'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
|
||||
@@ -64,7 +64,6 @@ The analytic plan validates the minimum and maximum percentage at the time of cr
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/accounting',
|
||||
'images': ['images/analytic_plan.jpeg'],
|
||||
'depends': ['account', 'account_analytic_default'],
|
||||
'data': [
|
||||
'security/account_analytic_plan_security.xml',
|
||||
|
||||
@@ -39,7 +39,6 @@ account when the invoice is created to transfer this amount to the
|
||||
debtor or creditor account. Secondly, price differences between actual
|
||||
purchase price and fixed product standard price are booked on a separate
|
||||
account.""",
|
||||
'images': ['images/account_anglo_saxon.jpeg'],
|
||||
'depends': ['product', 'purchase'],
|
||||
'category': 'Accounting & Finance',
|
||||
'demo': [],
|
||||
|
||||
@@ -48,7 +48,6 @@ Three reports are available:
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/accounting',
|
||||
'images': ['images/budget.jpeg','images/budgetary_position.jpeg'],
|
||||
'depends': ['account'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
|
||||
@@ -32,7 +32,6 @@ This module adds 'Allow Canceling Entries' field on form view of account journal
|
||||
If set to true it allows user to cancel entries & invoices.
|
||||
""",
|
||||
'website': 'https://www.odoo.com/page/accounting',
|
||||
'images': ['images/account_cancel.jpeg'],
|
||||
'depends' : ['account'],
|
||||
'data': ['account_cancel_view.xml' ],
|
||||
'demo': [],
|
||||
|
||||
@@ -45,7 +45,6 @@ Note that if you want to check the follow-up level for a given partner/account e
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/billing',
|
||||
'images': ['images/follow_ups.jpeg','images/send_followups.jpeg'],
|
||||
'depends': ['account_accountant', 'mail'],
|
||||
'data': [
|
||||
'security/account_followup_security.xml',
|
||||
|
||||
@@ -20,6 +20,3 @@
|
||||
##############################################################################
|
||||
from . import test_account_followup
|
||||
|
||||
checks = [
|
||||
test_account_followup,
|
||||
]
|
||||
|
||||
@@ -42,7 +42,6 @@ when you get the confirmation from your bank that your order has been accepted
|
||||
that you can book it in your accounting. To help you with that operation, you
|
||||
have a new option to import payment orders as bank statement lines.
|
||||
""",
|
||||
'images': ['images/payment_mode.jpeg','images/payment_order.jpeg'],
|
||||
'depends': ['account','account_voucher'],
|
||||
'data': [
|
||||
'security/account_payment_security.xml',
|
||||
|
||||
@@ -39,7 +39,6 @@ You can customize the following attributes of the sequence:
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com',
|
||||
'images': ['images/internal_sequence_number.jpeg'],
|
||||
'depends': ['account'],
|
||||
'data': [
|
||||
'account_sequence_data.xml',
|
||||
|
||||
@@ -42,7 +42,6 @@ This module manages:
|
||||
'category': 'Accounting & Finance',
|
||||
'sequence': 4,
|
||||
'website' : 'https://www.odoo.com/page/billing',
|
||||
'images' : ['images/customer_payment.jpeg','images/journal_voucher.jpeg','images/sales_receipt.jpeg','images/supplier_voucher.jpeg','images/customer_invoice.jpeg','images/customer_refunds.jpeg'],
|
||||
'depends' : ['account'],
|
||||
'demo' : [],
|
||||
'data' : [
|
||||
|
||||
@@ -19,6 +19,24 @@
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="view_voucher_tree_nocreate">
|
||||
<field name="name">account.voucher.tree_nocreate</field>
|
||||
<field name="model">account.voucher</field>
|
||||
<field name="arch" type="xml">
|
||||
<tree colors="blue:state == 'draft';gray:state == 'cancel';red:audit" string="Voucher Entries" create="0" edit="0">
|
||||
<field name="date"/>
|
||||
<field name="number"/>
|
||||
<field name="reference"/>
|
||||
<field name="partner_id"/>
|
||||
<field name="journal_id" groups="account.group_account_user"/>
|
||||
<field name="period_id" invisible="context.get('visible', True)"/>
|
||||
<field name="type" invisible="context.get('visible', True)"/>
|
||||
<field name="amount" sum="Total Amount"/>
|
||||
<field name="audit" invisible="1"/>
|
||||
<field name="state"/>
|
||||
</tree>
|
||||
</field>
|
||||
</record>
|
||||
<record model="ir.ui.view" id="view_voucher_line_form">
|
||||
<field name="name">account.voucher.line.form</field>
|
||||
<field name="model">account.voucher.line</field>
|
||||
@@ -40,7 +58,7 @@
|
||||
<field name="name">account.voucher.form</field>
|
||||
<field name="model">account.voucher</field>
|
||||
<field name="arch" type="xml">
|
||||
<form string="Accounting Voucher">
|
||||
<form string="Accounting Voucher" create="0" edit="0">
|
||||
<header>
|
||||
<button name="proforma_voucher" string="Post" states="draft" class="oe_highlight"/>
|
||||
<button name="cancel_voucher" string="Cancel Voucher" type="object" states="posted" confirm="Are you sure you want to unreconcile this record?"/>
|
||||
@@ -160,12 +178,13 @@
|
||||
<field name="view_type">form</field>
|
||||
<field name="view_mode">tree,form,graph</field>
|
||||
<field name="context">{}</field>
|
||||
<field name="view_id" eval="view_voucher_tree"/>
|
||||
<field name="view_id" eval="view_voucher_tree_nocreate"/>
|
||||
<field name="search_view_id" ref="view_voucher_filter"/>
|
||||
</record>
|
||||
<record id="action_journal_voucher_tree" model="ir.actions.act_window.view">
|
||||
<field eval="1" name="sequence"/>
|
||||
<field name="view_mode">tree</field>
|
||||
<field name="view_id" ref="view_voucher_tree_nocreate"/>
|
||||
<field name="act_window_id" ref="action_voucher_list"/>
|
||||
</record>
|
||||
<record id="action_journal_voucher_form" model="ir.actions.act_window.view">
|
||||
|
||||
@@ -396,7 +396,7 @@
|
||||
</page>
|
||||
</notebook>
|
||||
<footer>
|
||||
<button name="button_proforma_voucher" string="Pay" class="oe_highlight" type="object"/> or
|
||||
<button name="button_proforma_voucher" string="Register Payment" class="oe_highlight" type="object"/> or
|
||||
<button string="Cancel" class="oe_link" special="cancel"/>
|
||||
</footer>
|
||||
</form>
|
||||
|
||||
@@ -39,7 +39,6 @@ compatible with older configurations.
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/employees',
|
||||
'images': ['images/analytic_user_function.jpeg'],
|
||||
'depends': ['hr_timesheet_sheet'],
|
||||
'data': ['analytic_user_function_view.xml', 'security/ir.model.access.csv'],
|
||||
'demo': [],
|
||||
|
||||
@@ -48,5 +48,4 @@ anonymization process to recover your previous data.
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/anonymization1.jpeg','images/anonymization2.jpeg','images/anonymization3.jpeg'],
|
||||
}
|
||||
|
||||
@@ -37,6 +37,5 @@ membership products (schemes).
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/association1.jpeg'],
|
||||
'website': 'https://www.odoo.com'
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@
|
||||
'name' : 'Authentication via LDAP',
|
||||
'version' : '1.0',
|
||||
'depends' : ['base'],
|
||||
'images' : ['images/ldap_configuration.jpeg'],
|
||||
'author' : 'OpenERP SA',
|
||||
#'description': < auto-loaded from README file
|
||||
'website' : 'https://www.odoo.com',
|
||||
|
||||
@@ -70,9 +70,9 @@ class OAuthLogin(Home):
|
||||
return providers
|
||||
|
||||
def get_state(self, provider):
|
||||
redirect = request.params.get('redirect', 'web')
|
||||
redirect = request.params.get('redirect') or 'web'
|
||||
if not redirect.startswith(('//', 'http://', 'https://')):
|
||||
redirect = '%s%s' % (request.httprequest.url_root, redirect)
|
||||
redirect = '%s%s' % (request.httprequest.url_root, redirect[1:] if redirect[0] == '/' else redirect)
|
||||
state = dict(
|
||||
d=request.session.db,
|
||||
p=provider['id'],
|
||||
|
||||
@@ -44,5 +44,4 @@ trigger an automatic reminder email.
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/base_action_rule1.jpeg','images/base_action_rule2.jpeg','images/base_action_rule3.jpeg'],
|
||||
}
|
||||
|
||||
@@ -20,6 +20,3 @@
|
||||
##############################################################################
|
||||
from . import base_action_rule_test
|
||||
|
||||
checks = [
|
||||
base_action_rule_test,
|
||||
]
|
||||
|
||||
@@ -38,5 +38,4 @@ Partners geolocalization
|
||||
'test': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': [],
|
||||
}
|
||||
|
||||
@@ -35,5 +35,4 @@ with a single statement.
|
||||
'data': ['base_iban_data.xml' , 'base_iban_view.xml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/base_iban1.jpeg'],
|
||||
}
|
||||
|
||||
@@ -1,3 +1 @@
|
||||
from . import test_cases
|
||||
|
||||
checks = [test_cases]
|
||||
|
||||
@@ -44,5 +44,4 @@ Shows you a list of applications features to install from.
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/base_setup1.jpeg','images/base_setup2.jpeg','images/base_setup3.jpeg','images/base_setup4.jpeg',],
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ class base_config_settings(osv.osv_memory):
|
||||
help='Work in multi-company environments, with appropriate security access between companies.\n'
|
||||
'-This installs the module multi_company.'),
|
||||
'module_share': fields.boolean('Allow documents sharing',
|
||||
help="""Share or embbed any screen of openerp."""),
|
||||
help="""Share or embbed any screen of Odoo."""),
|
||||
'module_portal': fields.boolean('Activate the customer portal',
|
||||
help="""Give your customers access to their documents."""),
|
||||
'module_auth_oauth': fields.boolean('Use external authentication providers, sign in with google, facebook, ...'),
|
||||
|
||||
@@ -58,5 +58,4 @@ only the country code will be validated.
|
||||
'data': ['base_vat_view.xml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/1_partner_vat.jpeg'],
|
||||
}
|
||||
|
||||
@@ -41,5 +41,4 @@ Allows users to create custom dashboard.
|
||||
'qweb': ['static/src/xml/*.xml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/1_dashboard_definition.jpeg','images/2_publish_note.jpeg','images/3_admin_dashboard.jpeg',],
|
||||
}
|
||||
|
||||
@@ -55,5 +55,4 @@ If you need to manage your meetings, you should install the CRM module.
|
||||
'installable': True,
|
||||
'application': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/calendar1.jpeg', 'images/calendar2.jpeg', 'images/calendar3.jpeg', 'images/calendar4.jpeg'],
|
||||
}
|
||||
|
||||
@@ -852,10 +852,11 @@ class calendar_event(osv.Model):
|
||||
if values.get('start_datetime') or values.get('start_date') or values.get('start') \
|
||||
or values.get('stop_datetime') or values.get('stop_date') or values.get('stop'):
|
||||
allday = values.get("allday", None)
|
||||
event = self.browse(cr, uid, id, context=context)
|
||||
|
||||
if allday is None:
|
||||
if id:
|
||||
allday = self.read(cr, uid, [id], ['allday'], context=context)[0].get('allday')
|
||||
allday = event.allday
|
||||
else:
|
||||
allday = False
|
||||
_logger.debug("Calendar - All day is not specified, arbitrarily set to False")
|
||||
@@ -872,10 +873,16 @@ class calendar_event(osv.Model):
|
||||
values[fld] = values['%s_%s' % (fld, key)]
|
||||
|
||||
diff = False
|
||||
if allday and values.get('stop_date') and values.get('start_date'):
|
||||
diff = datetime.strptime(values['stop_date'].split(' ')[0], DEFAULT_SERVER_DATE_FORMAT) - datetime.strptime(values['start_date'].split(' ')[0], DEFAULT_SERVER_DATE_FORMAT)
|
||||
elif values.get('stop_datetime') and values.get('start_datetime'):
|
||||
diff = datetime.strptime(values['stop_datetime'].split('.')[0], DEFAULT_SERVER_DATETIME_FORMAT) - datetime.strptime(values['start_datetime'].split('.')[0], DEFAULT_SERVER_DATETIME_FORMAT)
|
||||
if allday and (values.get('stop_date') or values.get('start_date')):
|
||||
stop_date = values.get('stop_date') or event.stop_date
|
||||
start_date = values.get('start_date') or event.start_date
|
||||
if stop_date and start_date:
|
||||
diff = datetime.strptime(stop_date.split(' ')[0], DEFAULT_SERVER_DATE_FORMAT) - datetime.strptime(start_date.split(' ')[0], DEFAULT_SERVER_DATE_FORMAT)
|
||||
elif values.get('stop_datetime') or values.get('start_datetime'):
|
||||
stop_datetime = values.get('stop_datetime') or event.stop_datetime
|
||||
start_datetime = values.get('start_datetime') or event.start_datetime
|
||||
if stop_datetime and start_datetime:
|
||||
diff = datetime.strptime(stop_datetime.split('.')[0], DEFAULT_SERVER_DATETIME_FORMAT) - datetime.strptime(start_datetime.split('.')[0], DEFAULT_SERVER_DATETIME_FORMAT)
|
||||
if diff:
|
||||
duration = float(diff.days) * 24 + (float(diff.seconds) / 3600)
|
||||
values['duration'] = round(duration, 2)
|
||||
@@ -965,12 +972,14 @@ class calendar_event(osv.Model):
|
||||
|
||||
def _check_closing_date(self, cr, uid, ids, context=None):
|
||||
for event in self.browse(cr, uid, ids, context=context):
|
||||
if event.stop < event.start:
|
||||
if event.start_datetime and event.stop_datetime < event.start_datetime:
|
||||
return False
|
||||
if event.start_date and event.stop_date < event.start_date:
|
||||
return False
|
||||
return True
|
||||
|
||||
_constraints = [
|
||||
(_check_closing_date, 'Error ! End date cannot be set before start date.', ['start', 'stop'])
|
||||
(_check_closing_date, 'Error ! End date cannot be set before start date.', ['start_datetime', 'stop_datetime', 'start_date', 'stop_date'])
|
||||
]
|
||||
|
||||
def onchange_allday(self, cr, uid, ids, start=False, end=False, starttime=False, endtime=False, startdatetime=False, enddatetime=False, checkallday=False, context=None):
|
||||
|
||||
@@ -35,5 +35,4 @@ Adds a Claim link to the delivery order.
|
||||
'claim_delivery_data.xml',],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'images': ['images/1_claim_link_delivery_order.jpeg'],
|
||||
}
|
||||
|
||||
@@ -36,7 +36,6 @@ You can track your suppliers, customers and other contacts.
|
||||
'data': [
|
||||
'contacts_view.xml',
|
||||
],
|
||||
'images': ['images/contacts.jpeg'],
|
||||
'installable': True,
|
||||
'application': True,
|
||||
'auto_install': True,
|
||||
|
||||
@@ -119,15 +119,4 @@ Dashboard for CRM will include:
|
||||
'installable': True,
|
||||
'application': True,
|
||||
'auto_install': False,
|
||||
'images': [
|
||||
'images/customers.png',
|
||||
'images/leads.png',
|
||||
'images/opportunities_kanban.png',
|
||||
'images/opportunities_form.png',
|
||||
'images/opportunities_calendar.png',
|
||||
'images/opportunities_graph.png',
|
||||
'images/logged_calls.png',
|
||||
'images/scheduled_calls.png',
|
||||
'images/stages.png',
|
||||
],
|
||||
}
|
||||
|
||||
@@ -113,10 +113,11 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
||||
res = False
|
||||
lead_ids = vals.get('lead_ids', [])
|
||||
team_id = vals.get('team_id', False)
|
||||
partner_id = vals.get('partner_id')
|
||||
data = self.browse(cr, uid, ids, context=context)[0]
|
||||
leads = lead.browse(cr, uid, lead_ids, context=context)
|
||||
for lead_id in leads:
|
||||
partner_id = self._create_partner(cr, uid, lead_id.id, data.action, lead_id.partner_id.id, context=context)
|
||||
partner_id = self._create_partner(cr, uid, lead_id.id, data.action, partner_id or lead_id.partner_id.id, context=context)
|
||||
res = lead.convert_opportunity(cr, uid, [lead_id.id], partner_id, [], False, context=context)
|
||||
user_ids = vals.get('user_ids', False)
|
||||
if context.get('no_force_assignation'):
|
||||
@@ -139,18 +140,26 @@ class crm_lead2opportunity_partner(osv.osv_memory):
|
||||
|
||||
w = self.browse(cr, uid, ids, context=context)[0]
|
||||
opp_ids = [o.id for o in w.opportunity_ids]
|
||||
vals = {
|
||||
'team_id': w.team_id.id,
|
||||
}
|
||||
if w.partner_id:
|
||||
vals['partner_id'] = w.partner_id.id
|
||||
if w.name == 'merge':
|
||||
lead_id = lead_obj.merge_opportunity(cr, uid, opp_ids, context=context)
|
||||
lead_ids = [lead_id]
|
||||
lead = lead_obj.read(cr, uid, lead_id, ['type', 'user_id'], context=context)
|
||||
if lead['type'] == "lead":
|
||||
context = dict(context, active_ids=lead_ids)
|
||||
self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids, 'user_ids': [w.user_id.id], 'team_id': w.team_id.id}, context=context)
|
||||
vals.update({'lead_ids': lead_ids, 'user_ids': [w.user_id.id]})
|
||||
self._convert_opportunity(cr, uid, ids, vals, context=context)
|
||||
elif not context.get('no_force_assignation') or not lead['user_id']:
|
||||
lead_obj.write(cr, uid, lead_id, {'user_id': w.user_id.id, 'team_id': w.team_id.id}, context=context)
|
||||
vals.update({'user_id': w.user_id.id})
|
||||
lead_obj.write(cr, uid, lead_id, vals, context=context)
|
||||
else:
|
||||
lead_ids = context.get('active_ids', [])
|
||||
self._convert_opportunity(cr, uid, ids, {'lead_ids': lead_ids, 'user_ids': [w.user_id.id], 'team_id': w.team_id.id}, context=context)
|
||||
vals.update({'lead_ids': lead_ids, 'user_ids': [w.user_id.id]})
|
||||
self._convert_opportunity(cr, uid, ids, vals, context=context)
|
||||
|
||||
return self.pool.get('crm.lead').redirect_opportunity_view(cr, uid, lead_ids[0], context=context)
|
||||
|
||||
|
||||
@@ -51,9 +51,4 @@ automatically new claims based on incoming emails.
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': [
|
||||
'images/claim_categories.jpeg',
|
||||
'images/claim_stages.jpeg',
|
||||
'images/claims.jpeg'
|
||||
],
|
||||
}
|
||||
|
||||
@@ -47,5 +47,4 @@ and categorize your interventions with a channel and a priority level.
|
||||
'test': ['test/process/help-desk.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/helpdesk_analysis.jpeg','images/helpdesk_categories.jpeg','images/helpdesk_requests.jpeg'],
|
||||
}
|
||||
|
||||
@@ -105,8 +105,8 @@
|
||||
</notebook>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="message_ids" widget="mail_thread"/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
|
||||
@@ -54,5 +54,4 @@ to an appropriate local partner, based on the distance and the weight that was a
|
||||
'test': ['test/partner_assign.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/partner_geo_localization.jpeg','images/partner_grade.jpeg'],
|
||||
}
|
||||
|
||||
@@ -37,5 +37,4 @@ The decimal precision is configured per company.
|
||||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'images': ['images/1_decimal_accuracy_form.jpeg','images/1_decimal_accuracy_list.jpeg'],
|
||||
}
|
||||
|
||||
@@ -1,6 +1,2 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
import test_qweb_float
|
||||
|
||||
checks = [
|
||||
test_qweb_float
|
||||
]
|
||||
from . import test_qweb_float
|
||||
|
||||
@@ -44,5 +44,4 @@ invoices from picking, OpenERP is able to add and compute the shipping line.
|
||||
'test': ['test/delivery_cost.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/1_delivery_method.jpeg','images/2_delivery_pricelist.jpeg'],
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ class stock_picking(osv.osv):
|
||||
|
||||
_columns = {
|
||||
'carrier_id':fields.many2one("delivery.carrier","Carrier"),
|
||||
'volume': fields.float('Volume'),
|
||||
'volume': fields.float('Volume', copy=False),
|
||||
'weight': fields.function(_cal_weight, type='float', string='Weight', digits_compute= dp.get_precision('Stock Weight'), multi='_cal_weight',
|
||||
store={
|
||||
'stock.picking': (lambda self, cr, uid, ids, c={}: ids, ['move_lines'], 40),
|
||||
@@ -65,8 +65,8 @@ class stock_picking(osv.osv):
|
||||
'stock.picking': (lambda self, cr, uid, ids, c={}: ids, ['move_lines'], 40),
|
||||
'stock.move': (_get_picking_line, ['picking_id', 'product_id','product_uom_qty','product_uom'], 40),
|
||||
}),
|
||||
'carrier_tracking_ref': fields.char('Carrier Tracking Ref'),
|
||||
'number_of_packages': fields.integer('Number of Packages'),
|
||||
'carrier_tracking_ref': fields.char('Carrier Tracking Ref', copy=False),
|
||||
'number_of_packages': fields.integer('Number of Packages', copy=False),
|
||||
'weight_uom_id': fields.many2one('product.uom', 'Unit of Measure', required=True,readonly="1",help="Unit of measurement for Weight",),
|
||||
}
|
||||
|
||||
|
||||
@@ -51,5 +51,4 @@ This is a complete document management system.
|
||||
'test': ['test/document_test2.yml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/1_directories.jpeg','images/2_storage_media.jpeg','images/3_directories_structure.jpeg'],
|
||||
}
|
||||
|
||||
@@ -37,5 +37,4 @@ Key Features
|
||||
],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/1_event_type_list.jpeg', 'images/2_events.jpeg', 'images/3_registrations.jpeg', 'images/events_kanban.jpeg'],
|
||||
}
|
||||
|
||||
@@ -64,5 +64,4 @@ For more specific needs, you may also assign custom-defined actions
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': True,
|
||||
'images': ['images/1_email_servers.jpeg'],
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
'description' : """
|
||||
Vehicle, leasing, insurances, cost
|
||||
==================================
|
||||
With this module, OpenERP helps you managing all your vehicles, the
|
||||
With this module, Odoo helps you managing all your vehicles, the
|
||||
contracts associated to those vehicle as well as services, fuel log
|
||||
entries, costs and many other features necessary to the management
|
||||
of your fleet of vehicle(s)
|
||||
@@ -56,7 +56,6 @@ Main Features
|
||||
'fleet_data.xml',
|
||||
'fleet_board_view.xml',
|
||||
],
|
||||
'images': ['images/costs_analysis.jpeg','images/indicative_costs_analysis.jpeg','images/vehicles.jpeg','images/vehicles_contracts.jpeg','images/vehicles_fuel.jpeg','images/vehicles_odometer.jpeg','images/vehicles_services.jpeg'],
|
||||
|
||||
'demo': ['fleet_demo.xml'],
|
||||
|
||||
|
||||
@@ -285,8 +285,8 @@
|
||||
</group>
|
||||
</sheet>
|
||||
<div class="oe_chatter">
|
||||
<field name="message_ids" widget="mail_thread" options='{"thread_level": 1}'/>
|
||||
<field name="message_follower_ids" widget="mail_followers"/>
|
||||
<field name="message_ids" widget="mail_thread" options='{"thread_level": 1}'/>
|
||||
</div>
|
||||
</form>
|
||||
</field>
|
||||
|
||||
@@ -20,7 +20,3 @@
|
||||
##############################################################################
|
||||
|
||||
from . import test_challenge
|
||||
|
||||
checks = [
|
||||
test_challenge,
|
||||
]
|
||||
|
||||
@@ -42,12 +42,6 @@ You can manage:
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/employees',
|
||||
'images': [
|
||||
'images/hr_department.jpeg',
|
||||
'images/hr_employee.jpeg',
|
||||
'images/hr_job_position.jpeg',
|
||||
'static/src/img/default_image.png',
|
||||
],
|
||||
'depends': ['base_setup','mail', 'resource', 'board'],
|
||||
'data': [
|
||||
'security/hr_security.xml',
|
||||
|
||||
@@ -33,7 +33,6 @@ actions(Sign in/Sign out) performed by them.
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/employees',
|
||||
'images': ['images/hr_attendances.jpeg'],
|
||||
'depends': ['hr', 'report'],
|
||||
'data': [
|
||||
'security/ir_rule.xml',
|
||||
|
||||
@@ -37,7 +37,6 @@ You can assign several contracts per employee.
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/employees',
|
||||
'images': ['images/hr_contract.jpeg'],
|
||||
'depends': ['base_action_rule', 'hr'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
|
||||
@@ -27,9 +27,6 @@
|
||||
'sequence': 31,
|
||||
'website': 'https://www.odoo.com/page/appraisal',
|
||||
'summary': 'Periodical Evaluations, Appraisals, Surveys',
|
||||
'images': ['images/hr_evaluation_analysis.jpeg',
|
||||
'images/hr_evaluation.jpeg',
|
||||
'images/hr_interview_requests.jpeg'],
|
||||
'depends': ['hr', 'calendar', 'survey'],
|
||||
'description': """
|
||||
Periodical Employees evaluation and appraisals
|
||||
|
||||
@@ -45,7 +45,6 @@ This module also uses analytic accounting and is compatible with the invoice on
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/expenses',
|
||||
'images': ['images/hr_expenses_analysis.jpeg', 'images/hr_expenses.jpeg'],
|
||||
'depends': ['hr', 'account_accountant', 'report'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
|
||||
@@ -44,7 +44,6 @@ You can keep track of leaves in different ways by following reports:
|
||||
|
||||
A synchronization with an internal agenda (Meetings of the CRM module) is also possible in order to automatically create a meeting when a holiday request is accepted by setting up a type of meeting in Leave Type.
|
||||
""",
|
||||
'images': ['images/hr_allocation_requests.jpeg', 'images/hr_leave_requests.jpeg', 'images/leaves_analysis.jpeg'],
|
||||
'depends': ['hr', 'calendar', 'resource'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
|
||||
@@ -53,14 +53,14 @@ class hr_holidays_status(osv.osv):
|
||||
# note: add only validated allocation even for the virtual
|
||||
# count; otherwise pending then refused allocation allow
|
||||
# the employee to create more leaves than possible
|
||||
status_dict['virtual_remaining_leaves'] += holiday.number_of_days
|
||||
status_dict['max_leaves'] += holiday.number_of_days
|
||||
status_dict['remaining_leaves'] += holiday.number_of_days
|
||||
status_dict['virtual_remaining_leaves'] += holiday.number_of_days_temp
|
||||
status_dict['max_leaves'] += holiday.number_of_days_temp
|
||||
status_dict['remaining_leaves'] += holiday.number_of_days_temp
|
||||
elif holiday.type == 'remove': # number of days is negative
|
||||
status_dict['virtual_remaining_leaves'] += holiday.number_of_days
|
||||
status_dict['virtual_remaining_leaves'] -= holiday.number_of_days_temp
|
||||
if holiday.state == 'validate':
|
||||
status_dict['leaves_taken'] -= holiday.number_of_days
|
||||
status_dict['remaining_leaves'] += holiday.number_of_days
|
||||
status_dict['leaves_taken'] += holiday.number_of_days_temp
|
||||
status_dict['remaining_leaves'] -= holiday.number_of_days_temp
|
||||
return result
|
||||
|
||||
def _user_left_days(self, cr, uid, ids, name, args, context=None):
|
||||
|
||||
@@ -19,8 +19,5 @@
|
||||
#
|
||||
##############################################################################
|
||||
|
||||
from openerp.addons.hr_holidays.tests import test_holidays_flow
|
||||
from . import test_holidays_flow
|
||||
|
||||
checks = [
|
||||
test_holidays_flow,
|
||||
]
|
||||
|
||||
@@ -40,12 +40,6 @@ Generic Payroll system.
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/employees',
|
||||
'images': [
|
||||
'images/hr_company_contributions.jpeg',
|
||||
'images/hr_salary_heads.jpeg',
|
||||
'images/hr_salary_structure.jpeg',
|
||||
'images/hr_employee_payslip.jpeg'
|
||||
],
|
||||
'depends': [
|
||||
'hr',
|
||||
'hr_contract',
|
||||
|
||||
@@ -32,7 +32,6 @@ Generic Payroll system Integrated with Accounting.
|
||||
* Company Contribution Management
|
||||
""",
|
||||
'author':'OpenERP SA',
|
||||
'images': ['images/hr_employee_payslip.jpeg'],
|
||||
'website': 'https://www.odoo.com/page/employees',
|
||||
'depends': [
|
||||
'hr_payroll',
|
||||
|
||||
@@ -37,8 +37,6 @@ You can define the different phases of interviews and easily rate the applicant
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/recruitment',
|
||||
'images': ['images/hr_recruitment_analysis.jpeg',
|
||||
'images/hr_recruitment_applicants.jpeg'],
|
||||
'depends': [
|
||||
'decimal_precision',
|
||||
'hr',
|
||||
|
||||
@@ -40,7 +40,6 @@ up a management by affair.
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/employees',
|
||||
'images': ['images/hr_timesheet_lines.jpeg'],
|
||||
'depends': ['account', 'hr', 'base', 'hr_attendance'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
|
||||
@@ -34,7 +34,6 @@ You can define price lists in analytic account, make some theoretical revenue
|
||||
reports.""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/employees',
|
||||
'images': ['images/hr_bill_task_work.jpeg','images/hr_type_of_invoicing.jpeg'],
|
||||
'depends': ['account', 'hr_timesheet', 'report'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
|
||||
@@ -45,7 +45,6 @@ The validation can be configured in the company:
|
||||
""",
|
||||
'author': 'OpenERP SA',
|
||||
'website': 'https://www.odoo.com/page/employees',
|
||||
'images': ['images/hr_my_current_timesheet.jpeg','images/hr_timesheet_analysis.jpeg','images/hr_timesheet_sheet_analysis.jpeg','images/hr_timesheet_activity.jpeg'],
|
||||
'depends': ['hr_timesheet', 'hr_timesheet_invoice'],
|
||||
'data': [
|
||||
'security/ir.model.access.csv',
|
||||
|
||||
@@ -228,7 +228,7 @@ class hr_timesheet_sheet(osv.osv):
|
||||
|
||||
def _sheet_date(self, cr, uid, ids, forced_user_id=False, context=None):
|
||||
for sheet in self.browse(cr, uid, ids, context=context):
|
||||
new_user_id = forced_user_id or sheet.user_id and sheet.user_id.id
|
||||
new_user_id = forced_user_id or sheet.employee_id.user_id and sheet.employee_id.user_id.id
|
||||
if new_user_id:
|
||||
cr.execute('SELECT id \
|
||||
FROM hr_timesheet_sheet_sheet \
|
||||
@@ -591,16 +591,24 @@ class hr_timesheet_sheet_sheet_day(osv.osv):
|
||||
) union (
|
||||
select
|
||||
-min(a.id) as id,
|
||||
a.name::date as name,
|
||||
(a.name AT TIME ZONE 'UTC' AT TIME ZONE coalesce(p.tz, 'UTC'))::date as name,
|
||||
s.id as sheet_id,
|
||||
0.0 as total_timesheet,
|
||||
SUM(((EXTRACT(hour FROM a.name) * 60) + EXTRACT(minute FROM a.name)) * (CASE WHEN a.action = 'sign_in' THEN -1 ELSE 1 END)) as total_attendance
|
||||
SUM(((EXTRACT(hour FROM (a.name AT TIME ZONE 'UTC' AT TIME ZONE coalesce(p.tz, 'UTC'))) * 60) + EXTRACT(minute FROM (a.name AT TIME ZONE 'UTC' AT TIME ZONE coalesce(p.tz, 'UTC')))) * (CASE WHEN a.action = 'sign_in' THEN -1 ELSE 1 END)) as total_attendance
|
||||
from
|
||||
hr_attendance a
|
||||
LEFT JOIN hr_timesheet_sheet_sheet s
|
||||
ON s.id = a.sheet_id
|
||||
JOIN hr_employee e
|
||||
ON a.employee_id = e.id
|
||||
JOIN resource_resource r
|
||||
ON e.resource_id = r.id
|
||||
LEFT JOIN res_users u
|
||||
ON r.user_id = u.id
|
||||
LEFT JOIN res_partner p
|
||||
ON u.partner_id = p.id
|
||||
WHERE action in ('sign_in', 'sign_out')
|
||||
group by a.name::date, s.id
|
||||
group by (a.name AT TIME ZONE 'UTC' AT TIME ZONE coalesce(p.tz, 'UTC'))::date, s.id
|
||||
)) AS foo
|
||||
GROUP BY name, sheet_id
|
||||
)) AS bar""")
|
||||
|
||||
@@ -31,8 +31,8 @@ index_template = """
|
||||
<p>
|
||||
The PosBox is an hardware adapter that allows you to use
|
||||
receipt printers and barcode scanners with Odoo's Point of
|
||||
Sale, <b>version 8.0 or later</b>. You can start an <a href='https://www.openerp.com/start'>online free trial</a>,
|
||||
or <a href='https://www.openerp.com/start?download'>download and install</a> it yourself.
|
||||
Sale, <b>version 8.0 or later</b>. You can start an <a href='https://www.odoo.com/start'>online free trial</a>,
|
||||
or <a href='https://www.odoo.com/start?download'>download and install</a> it yourself.
|
||||
</p>
|
||||
<p>
|
||||
For more information on how to setup the Point of Sale with
|
||||
|
||||
@@ -98,7 +98,7 @@ class Proxy(http.Controller):
|
||||
<p>
|
||||
Copy and paste your printer's device description in the form below. You can find
|
||||
your printer's description in the device list above. If you find that your printer works
|
||||
well, please send your printer's description to <a href='mailto:support@openerp.com'>
|
||||
well, please send your printer's description to <a href='mailto:support@odoo.com'>
|
||||
support@openerp.com</a> so that we can add it to the default list of supported devices.
|
||||
</p>
|
||||
<form action='/hw_proxy/escpos/add_supported_device' method='GET'>
|
||||
|
||||
@@ -43,5 +43,4 @@ document and Wiki based Hidden.
|
||||
'demo': ['knowledge_demo.xml'],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/1_config_knowledge.jpeg'],
|
||||
}
|
||||
|
||||
@@ -41,5 +41,4 @@ Plan contable argentino e impuestos de acuerdo a disposiciones vigentes
|
||||
'demo': [],
|
||||
'active': False,
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_ar.jpeg','images/l10n_ar_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -83,5 +83,4 @@ Wizards provided by this module:
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'website': 'https://www.odoo.com/page/accounting',
|
||||
'images': ['images/1_config_chart_l10n_be.jpeg','images/2_l10n_be_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -71,7 +71,6 @@ description provided by the CODA configuration tables is based upon the CODA
|
||||
V2.2 specifications.
|
||||
If required, you can manually adjust the descriptions via the CODA configuration menu.
|
||||
''',
|
||||
'images': ['images/coda_logs.jpeg', 'images/import_coda_logs.jpeg'],
|
||||
'depends': ['account_voucher', 'base_iban', 'l10n_be_invoice_bba', 'account_bank_statement_import'],
|
||||
'demo': ['l10n_be_coda_demo.xml'],
|
||||
'data': [
|
||||
|
||||
@@ -57,6 +57,7 @@ class account_bank_statement_import(osv.TransientModel):
|
||||
statement['version'] = line[127]
|
||||
if statement['version'] not in ['1', '2']:
|
||||
raise UserError(_('Error') + ' R001: ' + _('CODA V%s statements are not supported, please contact your bank') % statement['version'])
|
||||
statement['globalisation_stack'] = []
|
||||
statement['lines'] = []
|
||||
statement['date'] = time.strftime(tools.DEFAULT_SERVER_DATE_FORMAT, time.strptime(rmspaces(line[5:11]), '%d%m%y'))
|
||||
statement['separateApplication'] = rmspaces(line[83:88])
|
||||
@@ -116,7 +117,11 @@ class account_bank_statement_import(osv.TransientModel):
|
||||
statementLine['type'] = 'normal'
|
||||
statementLine['globalisation'] = int(line[124])
|
||||
if statementLine['globalisation'] > 0:
|
||||
statementLine['type'] = 'globalisation'
|
||||
if statementLine['globalisation'] in statement['globalisation_stack']:
|
||||
statement['globalisation_stack'].remove(statementLine['globalisation'])
|
||||
else:
|
||||
statementLine['type'] = 'globalisation'
|
||||
statement['globalisation_stack'].append(statementLine['globalisation'])
|
||||
globalisation_comm[statementLine['ref_move']] = statementLine['communication']
|
||||
if not statementLine.get('communication'):
|
||||
statementLine['communication'] = globalisation_comm.get(statementLine['ref_move'], '')
|
||||
|
||||
@@ -17,7 +17,7 @@
|
||||
# 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": "Bolivia Localization Chart Account",
|
||||
"version": "1.0",
|
||||
@@ -46,6 +46,5 @@ Plan contable boliviano e impuestos de acuerdo a disposiciones vigentes
|
||||
"active": False,
|
||||
"installable": True,
|
||||
"certificate" : "",
|
||||
'images': ['images/config_chart_l10n_bo.jpeg','images/l10n_bo_chart.jpeg'],
|
||||
|
||||
}
|
||||
|
||||
@@ -75,5 +75,4 @@ position.
|
||||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_ca.jpeg','images/l10n_ca_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -70,5 +70,4 @@ https://github.com/OCA/l10n-switzerland
|
||||
'test': [],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_ch.jpeg', 'images/l10n_ch_chart.jpeg']
|
||||
}
|
||||
|
||||
@@ -40,5 +40,4 @@ Plan contable chileno e impuestos de acuerdo a disposiciones vigentes
|
||||
'demo': [],
|
||||
'active': False,
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_cl.jpeg','images/l10n_cl_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -49,5 +49,4 @@
|
||||
'license': 'GPL-3',
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_cn.jpeg','images/l10n_cn_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -45,5 +45,4 @@
|
||||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'images': [],
|
||||
}
|
||||
|
||||
@@ -68,5 +68,4 @@ please go to http://translations.launchpad.net/openerp-costa-rica.
|
||||
'license': 'Other OSI approved licence',
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/config_chart_l10n_cr.jpeg','images/l10n_cr_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -148,5 +148,4 @@ German accounting chart and localization.
|
||||
'l10n_de_wizard.xml',
|
||||
],
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_de.jpeg','images/l10n_de_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -42,5 +42,4 @@ Accounting chart and localization for Ecuador.
|
||||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_ec.jpeg','images/l10n_ec_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -73,5 +73,4 @@ configuration of their taxes and fiscal positions manually.
|
||||
'demo': [],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_fr.jpeg','images/l10n_fr_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -41,5 +41,4 @@ Greek accounting chart and localization.
|
||||
'l10n_gr_wizard.xml'
|
||||
],
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_gr.jpeg','images/l10n_gr_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -54,5 +54,4 @@ taxes and the Quetzal currency.""",
|
||||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_gt.jpeg','images/l10n_gt_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -51,5 +51,4 @@ Sheet, now only Vertical format has been permitted Which is Supported By OpenERP
|
||||
],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_in.jpeg','images/l10n_in_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -52,5 +52,4 @@ Italian accounting chart and localization.
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/config_chart_l10n_it.jpeg','images/l10n_it_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -56,5 +56,4 @@ This is the base module to manage the accounting chart for Luxembourg.
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'auto_install': False,
|
||||
'images': ['images/config_chart_l10n_lu.jpeg','images/l10n_lu_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -46,5 +46,4 @@ Seddik au cours du troisième trimestre 2010.""",
|
||||
'demo' : [],
|
||||
'auto_install': False,
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_ma.jpeg','images/l10n_ma_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -130,5 +130,4 @@ De extra cijfers worden dan achter het rekeningnummer aangevult met 'nullen'.
|
||||
],
|
||||
'demo' : [],
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_nl.jpeg','images/l10n_nl_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -47,5 +47,4 @@ Con la Colaboración de
|
||||
"active": False,
|
||||
"installable": True,
|
||||
"certificate" : "",
|
||||
'images': ['images/config_chart_l10n_cl.jpeg','images/l10n_cl_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -42,5 +42,4 @@ SUNAT 2011 (PCGE 2010).
|
||||
'demo': [],
|
||||
'active': False,
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_pe.jpeg','images/l10n_pe_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -34,5 +34,4 @@ Thai accounting chart and localization.
|
||||
'depends': ['account_chart'],
|
||||
'data': [ 'account_data.xml' ],
|
||||
'installable': True,
|
||||
'images': ['images/config_chart_l10n_th.jpeg','images/l10n_th_chart.jpeg'],
|
||||
}
|
||||
|
||||
@@ -48,5 +48,4 @@ Bu modül kurulduktan sonra, Muhasebe yapılandırma sihirbazı çalışır
|
||||
],
|
||||
'demo': [],
|
||||
'installable': True,
|
||||
'images': ['images/chart_l10n_tr_1.jpg','images/chart_l10n_tr_2.jpg','images/chart_l10n_tr_3.jpg'],
|
||||
}
|
||||
|
||||
@@ -44,5 +44,4 @@ This is the latest UK OpenERP localisation necessary to run OpenERP accounting f
|
||||
],
|
||||
'demo' : ['demo/demo.xml'],
|
||||
'installable': 'True',
|
||||
'images': ['images/config_chart_l10n_uk.jpeg','images/l10n_uk_chart.jpeg'],
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user